如何将用户控件放入 Visual Studio 工具箱

Posted

技术标签:

【中文标题】如何将用户控件放入 Visual Studio 工具箱【英文标题】:How to put a UserControl into Visual Studio toolBox 【发布时间】:2011-03-27 15:53:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我刚刚在 VS 2022 中遇到了这个问题。可能有一个快速/简单的答案。

我的快速而肮脏的用户控件不会出现在工具箱中(完全重建等)。

我退出了解决方案和 VS,重新加载了所有内容,重新构建,它出现并工作了。

【讨论】:

【参考方案2】:

在 VS2008/2005 中让它们自动添加到工具箱时遇到问题。

实际上有一个选项可以阻止工具箱自动填充!

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

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

您好,您的解决方案中的用户控件应该会自动添加到工具箱中。

您可能还需要重新加载解决方案。

【讨论】:

对我来说这里的关键词是“重建”...没试过,哦!单独这样做就为我排序了。 而且,我必须在重建后重新打开解决方案 在 VS2012 中,他们现在在选项对话框中添加了提示“必须重新打开当前解决方案才能使其生效”。 @AnatoliiGumennyi 如果UserControl 在当前项目之外,您将必须遵循@Arseny 的指示。 注意:在 VS2013 中,Toolbox > AutoToolboxPopulate 设置现在默认为全新安装时的 True。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

如果您在基本控件中使用泛型,则为基本问题。 如果是:

假设我们有控制权:

public class MyComboDropDown : ComboDropDownComon<MyType>

    public MyComboDropDown()  

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

public class MyComboDropDown : MyComboDropDownBase

    public MyComboDropDown()  


public class MyComboDropDownBase : ComboDropDownComon<MyType>



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

【讨论】:

【参考方案5】:

重新编译对我有用!

【讨论】:

【参考方案6】:

我的设计师的问题是 32 位与 64 位的问题。按照Cannot add Controls from 64-bit Assemblies to the Toolbox or Use in Designers Within the Visual Studio IDE MS 知识库文章中的说明,我可以将控件添加到工具箱。

【讨论】:

【参考方案7】:

我有许多用户控件,但一个拒绝显示在 工具箱 中,即使我重建了解决方案并在 选择项目... 对话框中检查了它。

解决办法:

    Solution Explorer右键单击有问题的用户控制文件并选择从项目中排除 重建解决方案 右键单击用户控件并选择包含在项目中(假设您在解决方案资源管理器中启用了显示所有文件

注意这还需要您启用 AutoToolboxPopulate 选项。正如@DaveF 的回答所暗示的那样。

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

【讨论】:

【参考方案8】:

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

PS。 这个程序集应该之前注册过。

【讨论】:

你能解释一下“之前注册过”吗?我不认为这是必需的。 他可能的意思是你必须将你的用户控件放在一个单独的 DLL 上,然后在构建它之后将该 DLL 添加到工具箱中。【参考方案9】:

我发现用户控件必须有一个无参数的构造函数,否则它不会出现在列表中。至少在 vs2005 中是这样的。

【讨论】:

vs2015中也有? 在 vs2015 中也是如此 将 vs2017 添加到列表中 如果这是基于制作自定义控件的实例,它可能“总是”成立,就像 .NET 序列化的工作方式一样。如果没有无参数构造函数,它就不能这样做。 谢谢!我花了半个小时尝试将我的控件添加到工具箱中,这就是答案【参考方案10】:

使用 VS 2010:

假设您有一个 Windows.Forms 项目。您将一个 UserControl(例如 MyControl)添加到项目中,然后将其全部设计好。现在您想将它添加到您的工具箱中。

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

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

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

【讨论】:

在工具箱中导入.exe也可以用于其他项目。 任何包含“或者设计师心脏病发作”的答案都会得到我的投票! 我做了同样的事情,一切都很好,但是当我将代码移动到另一个项目中时,创建一个 dll,并引用该 dll 文件,自定义控件没有显示出来。【参考方案11】:

有几种方法。

    在您的原始项目中,选择文件|导出模板 然后选择 ItemTemplate 并按照向导进行操作。

    将您的 UserControl 移动到单独的 ClassLibrary(并修复命名空间等)。 从需要它的项目中将 ref 添加到类库。不要打扰 GAC 或任何东西,只需 DLL 文件。

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

【讨论】:

这似乎是更好的方法。唯一的缺点是您无法直观地编辑控件(或者至少我没有找到方法)。 没关系,我将模板添加为元素,设计师正在展示。 如果包含 UserControl 的项目在同一个解决方案中,我完全同意并且强烈建议不要链接到 DLL。并且它将与 DLL 一起使用,即 Library Project 中的 UserControl 将显示在任何引用该库的 WinForms 项目中(当然是在重建之后;-))。

以上是关于如何将用户控件放入 Visual Studio 工具箱的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Visual Studio 的设计器在 ASP.NET Web 用户控件中正确呈现 CSS?

如何停止 Visual Studio 为设计器中的控件生成属性设置?

MFC:如何将自定义控件包含到 Visual Studio 的工具箱中

如何在 Visual Studio 中提取默认控件模板?

用户控件总是使 Visual Studio 崩溃

将xamarin android控件添加到visual studio工具箱中