我在项目中创建了一个用户控件,在构建项目后,需要将其放入工具箱中,并将其用作通用控件。但是我不能。该UserControl
项目位于我的项目名称空间中,我尝试Choose Item
在右键菜单中进行尝试,但没有找到添加该项目的方法。
Answers:
我假设您使用的是VS2010(这就是您标记问题的方式),我无法像VS2008 / 2005那样使它们自动添加到工具箱中。实际上,有一个选项可以阻止工具箱自动填充!
转到工具>选项> Windows窗体设计器>常规
在列表的底部,您会找到“工具箱”>“ AutoToolboxPopulate”,在新安装时默认为False。将其设置为true,然后重新构建您的解决方案。
嘿,他们应该将您在解决方案中的用户控件自动添加到工具箱中。您可能还必须重新加载解决方案。
UserControl
不在当前项目中,则必须遵循@Arseny的说明。
我发现用户控件必须具有无参数的构造函数,否则它将不会显示在列表中。至少在vs2005中是这样。
使用VS 2010:
假设您有一个Windows.Forms项目。您将一个UserControl(例如MyControl)添加到项目中,并进行全部设计。现在,您要将其添加到工具箱中。
一旦项目成功构建一次,它就会出现在您的Framework Components中。右键单击“工具箱”以获取上下文菜单,选择“选择项目...”,然后浏览到“ .NET Framework组件”选项卡下的控件名称(MyControl)。
与使用dll相比的优势:您可以在与窗体相同的项目中编辑控件,并且窗体将使用新控件构建。但是,该控件仅适用于该项目。
注意:如果控件有构建错误,请先解决错误,然后再继续处理包含的表单,否则设计者会心脏病发作。
我有很多用户控件,但是即使我重建了解决方案并且在“ 选择项...”对话框中选中了该控件,也拒绝在工具箱中显示该控件。
解:
请注意,这还需要启用AutoToolboxPopulate选项。正如@DaveF答案所示。
替代解决方案:我不确定这是否可行,因为已经解决了我的问题,所以无法尝试,但是如果您从“ 选择项目...”对话框中取消选中用户控件,请单击“确定”,然后再将其打开并检查了用户控件。那也许也行。
有两种方法。
在原始项目中,选择“文件” |“导出模板”,
然后选择“ ItemTemplate”并遵循向导。
将您的UserControl移到单独的ClassLibrary(并修复名称空间等)。
将引用添加到需要它的项目的类库中。不要为GAC或其他任何文件而烦恼。
我不建议将UserControl放在普通的ToolBox中,但是可以做到。查看来自@Arseny的答案
基本问题(如果您在基本控件中使用泛型)。如是:
可以说我们有控制权:
public class MyComboDropDown : ComboDropDownComon<MyType>
{
public MyComboDropDown() { }
}
MyComboDropDown不允许在其上打开设计器,并且不会在工具箱中显示。为什么?因为基本控件尚未编译-当编译MyComboDropDown时。您可以对此进行修改:
public class MyComboDropDown : MyComboDropDownBase
{
public MyComboDropDown() { }
}
public class MyComboDropDownBase : ComboDropDownComon<MyType>
{
}
比重建和重置工具箱后,它应该能够在设计器以及工具箱中看到MyComboDropDown
我的设计师的问题是32 vs 64位问题。按照“ 无法将控件从64位程序集添加到工具箱”或“在Visual Studio IDE MS KB 中的设计器中使用”中的说明进行操作之后,可以将控件添加到工具箱中。
重新编译对我有用!