如何将UserControl放入Visual Studio工具箱
我在我的项目中做了一个用户控件,在构build项目之后,我需要将它放在我的工具箱中,并将其用作通用控件。 但我不能。 UserControl
是在我的项目命名空间,我试图在右键菜单中Choose Item
,但我没有find一种方法来添加它。
我假设你使用VS2010(这就是你问题标签),我有问题让他们自动添加到工具箱,如在VS2008 / 2005。 实际上有一个选项来停止工具箱自动填充!
转到工具>选项> Windows窗体devise器>常规
在列表底部,您会发现Toolbox> AutoToolboxPopulate,其中全新安装默认为False。 将其设置为true,然后重build您的解决scheme。
嘿presto他们的用户控制解决scheme应该自动添加到工具箱。 您也可能需要重新加载解决scheme。
在工具栏上单击右键,然后在上下文菜单中单击“select项目”。 popup注册组件的对话框。 在这个对话框中点击“浏览”,select你想使用的用户控件的程序集。
PS。 这个大会应该注册之前。
我发现用户控件必须有一个无参数的构造函数,否则它不会出现在列表中。 至less在vs2005中是这样的。
使用VS 2010:
假设你有一个Windows.Forms项目。 你添加一个用户控件(比如MyControl)到项目中,并将其devise完成。 现在你想把它添加到你的工具箱。
只要项目成功构build一次,它就会出现在你的框架组件中。 右键单击工具箱以获取上下文菜单,select“select项目…”,然后浏览到“.NET Framework组件”选项卡下的控件名称(MyControl)。
使用dll的优点:您可以在与您的表单相同的项目中编辑控件,并使用新的控件构build表单。 但是,这个控制只能用于这个项目。
注意:如果控件存在构build错误,请先解决它们,然后再转到包含的表单,否则devise器会发生心脏病。
有几种方法。
-
在您的原始项目中,select文件|导出模板
然后selectItemTemplate并按照向导。 -
将您的UserControl移动到一个单独的类库(并修复名称空间等)。
向需要它的项目添加一个ref到类库。 不要打扰GAC或任何东西,只是DLL文件。
我不会build议在普通的ToolBox中放置一个UserControl,但是可以这样做。 看到@Arseny的答案
我有许多用户控件,但是一个拒绝显示在工具箱中 ,即使我重build了解决scheme,并在“ select项目…”对话框中进行了检查。
解:
- 从解决scheme资源pipe理器中 , 右键单击有问题的用户控制文件,然后select“ 从项目中排除”
- 重build解决scheme
- 右键单击用户控件,然后select“ 包含在项目中” (假设您在“ 解决scheme资源pipe理器 ”中启用了“ 显示所有文件” )
注意这也需要您启用AutoToolboxPopulate选项。 正如@DaveF的答案所示。
备用解决scheme:我不确定这是否正常工作,而且由于我已经解决了我的问题,所以无法尝试,但是如果您从“ select项目…”对话框中取消选中用户控件,请点击“确定”,然后将其重新打开并检查了用户控件。 这也可能工作。
就我而言,我看不到项目中的任何控件。 只有右键单击工具箱并select“显示全部”,我看到他们,但他们被禁用…
将项目types从Windows应用程序更改为ClassLibrary进行了修复。
据我所知,你可以拖放你的当前项目中的usercontrol到工具箱。 问题是当你select一个不同的项目,用户控制已经消失。 所以我认为你必须build立一个单独的控制库项目:
在你的解决scheme中,添加一个新的项目,但是作为项目模板select“类库”。 在THAT项目中,添加一个用户控件,并执行你需要做的一切。 一旦完成,build立它,你会有自己的dll文件(它可以很容易地在项目bin /debugging文件夹中find)。
您可以添加此DLL到您的工具箱(右键单击添加…),它会留在那里所有的项目!
我的devise师的问题是32比64位的问题。 按照“ 无法将控件从64位程序集添加到工具箱”或“在Visual Studio IDE MS知识库文章中的devise器中使用”中的说明进行操作之后, 我可以将控件添加到工具箱中 。
重新编译为我做了诡计!
基本问题,如果您在您的基本控制中使用generics。 如是:
可以说我们有控制权:
public class MyComboDropDown : ComboDropDownComon<MyType> { public MyComboDropDown() { } }
MyComboDropDown将不允许打开它的devise器,将不会显示在工具箱中。 为什么? 因为基本控件尚未编译 – 当编译MyComboDropDown时。 你可以修改为:
public class MyComboDropDown : MyComboDropDownBase { public MyComboDropDown() { } } public class MyComboDropDownBase : ComboDropDownComon<MyType> { }
比重build后,重置工具箱,它应该能够在devise器和工具箱中看到MyComboDropDown