如何将UserControl放入Visual Studio工具箱


93

我在项目中创建了一个用户控件,在构建项目后,需要将其放入工具箱中,并将其用作通用控件。但是我不能。该UserControl项目位于我的项目名称空间中,我尝试Choose Item在右键菜单中进行尝试,但没有找到添加该项目的方法。

Answers:


114

我假设您使用的是VS2010(这就是您标记问题的方式),我无法像VS2008 / 2005那样使它们自动添加到工具箱中。实际上,有一个选项可以阻止工具箱自动填充!

转到工具>选项> Windows窗体设计器>常规

在列表的底部,您会找到“工具箱”>“ AutoToolboxPopulate”,在新安装时默认为False。将其设置为true,然后重新构建您的解决方案。

嘿,他们应该将您在解决方案中的用户控件自动添加到工具箱中。您可能还必须重新加载解决方案。


31
对我来说,这里的关键词是“重建”……没有尝试过,天哪!单独这样做对我来说很合理。
Danny Beckett

2
而且,在重建之后,我不得不重新打开解决方案
Jim Lahman 2013年

1
在VS2012中,他们现在在选项对话框中添加了提示“必须重新打开当前解决方案才能生效”。
卡洛斯·P

2
@AnatoliiGumennyi如果UserControl不在当前项目中,则必须遵循@Arseny的说明。
2015年

2
注意:在VS2013中,“工具箱”>“ AutoToolboxPopulate”设置现在在全新安装时默认为True。
Curmudgeon 2015年

35

右键单击工具栏,然后在上下文菜单中单击“选择项目”。弹出带有已注册组件的对话框。在此对话框中,单击“浏览”以选择要使用的用户控件的程序集。

PS。该程序集应在注册之前进行。


17
您能解释一下“之前注册”吗?我认为这不是必需的。
汉克·霍尔特曼


14

使用VS 2010:

假设您有一个Windows.Forms项目。您将一个UserControl(例如MyControl)添加到项目中,并进行全部设计。现在,您要将其添加到工具箱中。

一旦项目成功构建一次,它就会出现在您的Framework Components中。右键单击“工具箱”以获取上下文菜单,选择“选择项目...”,然后浏览到“ .NET Framework组件”选项卡下的控件名称(MyControl)。

与使用dll相比的优势:您可以在与窗体相同的项目中编辑控件,并且窗体将使用新控件构建。但是,该控件仅适用于该项目。

注意:如果控件有构建错误,请先解决错误,然后再继续处理包含的表单,否则设计者会心脏病发作。


1
如果您在工具箱中导入.exe,它也可能对其他项目可用。
塞巴斯蒂安

1
任何包含“或设计师患有心脏病”的答案都可以得到我的投票!
乔尔

我做了同样的事情,这一切都很好,但是当我将代码移到另一个项目中,创建一个dll并引用该dll文件时,自定义控件不会显示。
Fandi Susanto 2014年

6

我有很多用户控件,但是即使我重建了解决方案并且在“ 选择项...”对话框中选中了该控件,也拒绝在工具箱中显示该控件。

解:

  1. 解决方案资源管理器中,右键单击有问题的用户控制文件,然后选择“ 从项目中排除”
  2. 重建解决方案
  3. 右键单击用户控件,然后选择“ 包括在项目中”(假设您在“ 解决方案资源管理器”中启用了“ 显示所有文件”

请注意,这还需要启用AutoToolboxPopulate选项。正如@DaveF答案所示。

替代解决方案:我不确定这是否可行,因为已经解决了我的问题,所以无法尝试,但是如果您从“ 选择项目...”对话框中取消选中用户控件,请单击“确定”,然后再将其打开并检查了用户控件。那也许也行。


3

有两种方法。

  1. 在原始项目中,选择“文件” |“导出模板”,
    然后选择“ ItemTemplate”并遵循向导。

  2. 将您的UserControl移到单独的ClassLibrary(并修复名称空间等)。
    将引用添加到需要它的项目的类库中。不要为GAC或其他任何文件而烦恼。

我不建议将UserControl放在普通的ToolBox中,但是可以做到。查看来自@Arseny的答案


这似乎是更好的方法。唯一的缺点是您无法直观地编辑控件(或者至少我没有找到方法)。
塞巴斯蒂安

没关系,我将模板添加为元素,并且设计师正在展示。
塞巴斯蒂安

我完全同意,并且如果包含UserControl的项目在同一解决方案中,也强烈建议不要链接到DLL。它将与DLL一起使用,即Library Project中的UserControl将出现在任何引用该Library的WinForms项目中(当然,在重建之后;-)。
Xan-Kun Clark-Davis

2

就我而言,我看不到项目中的任何控件。仅当右键单击工具箱并选择“显示全部”时,我看到了它们,但是它们被禁用了...

将项目类型从Windows应用程序更改为ClassLibrary进行了修复。


1

基本问题(如果您在基本控件中使用泛型)。如是:

可以说我们有控制权:

public class MyComboDropDown : ComboDropDownComon<MyType>
{
    public MyComboDropDown() { }
}

MyComboDropDown不允许在其上打开设计器,并且不会在工具箱中显示。为什么?因为基本控件尚未编译-当编译MyComboDropDown时。您可以对此进行修改:

public class MyComboDropDown : MyComboDropDownBase
{
    public MyComboDropDown() { }
}

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

比重建和重置工具箱后,它应该能够在设计器以及工具箱中看到MyComboDropDown



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.