用户控件未显示在工具箱中

73
我有一些在ProjectA中创建的UserControls。我想将这些控件放在ProjectB的窗体上。这两个项目在同一个解决方案中,并且ProjectB引用了ProjectA,所以可以“看到”UserControls。
然而,这些UserControls并没有显示在工具箱中,因此无法将其拖入窗体中。
我已经尝试了重建,也删除了“bin”目录以强制重新构建。
如何让VS2008在工具箱中显示我的UserControls?

5
在我的用户控件中,有一个类型参数,即MyControl<T>,这意味着VS不会在工具箱中显示该控件。一旦我去掉了类型参数,一切都自动正常工作了。 - liwp
29个回答

3
除了已经给出的所有指示(工具>选项>Windows窗体设计器>常规:自动工具箱填充)+ 您需要构建解决方案(这对我来说很明显),您可能还需要注意类访问修饰符:它必须是PUBLIC。 我刚刚创建了一个控件,但它没有出现在工具箱列表中,我不知道为什么。因此,在设置之后。
public class  yourClass:control {}

比列表中显示的更多。希望这能帮助其他人。

2
这是我的问题: 我为控件添加了一个新构造函数,它接受一些参数,但我没有明确地重新声明空构造函数!工具箱只能包含具有空构造函数的控件。 通常,在vb中设计类时,它已经隐式定义了一个空构造函数(这意味着您不需要声明一个)。 但是,一旦您开始设计自己的构造函数,此空构造函数就会消失,因此您需要在代码中显式重新定义它! 无论如何,我意识到大多数经验丰富的vb编码器已经知道所有这些,但希望这可以帮助像我这样的新手 :)。

2

请检查您的构建输出目录。如果由于某种原因,您正在将输出构建到项目bin\目录以外的其他位置,则您的控件不会出现在工具箱中。


1
我通常会创建一个新的选项卡并将exe/dll添加到该选项卡中...但由于加载时间和一般的麻烦,我对这个解决方案不太满意。
朋友向我展示了一种加速的方法。不必为每个新控件单击工具箱中的“选择项目...”等 - 您可以创建一个名为MyCustomControls的文件,在那里您可以创建自定义控件。
现在,您只需要执行一次“选择项目...”并添加此文件。如果您以后决定添加新控件,请在MyCustomControls中创建它,然后重新构建。
然后,您的工具箱将拥有您的新控件。(如果您有AutoToolboxPopulate,则在常规编译时会自动显示它)
这很不幸,因为通常您希望将类分成“每个文件一个类”。很可怕,因为VS不想按您的方式做而破坏您的代码架构。:)
我对这个解决方案也不太满意,但是如果您需要快速完成某些操作,并且不关心文件中的多个用户控件或者只是懒惰,那么这可能适合您。:)

1

所有上述情况都有可能失败。

我通过创建一个新的用户控件(TestControl)来解决了这个问题,这触发了Visual Studio自动将我的项目控件选项卡和控件重新添加到工具箱中。然后我只需删除测试控件即可。

顺便说一下,这是在最近安装VS 2008自动Windows更新后发生的。


1
如果您仍然无法找到原因,导致vstudio工具箱未填充您的用户控件。那么您可以使用另一个Visual Studio来调试vstudio。在这里您可以找到如何操作

哇 - 如果我发现了一个 bug,那么我该如何修复它呢? - Thomas Weller

1
在我的情况下,错误的原因是控件的.dll文件路径过长。我将其缩短了一点,一切都正常工作了。
另外,我发现路径中的特殊符号(例如,我使用了#)会影响控件的显示。
希望这解决了问题。

1
如果您尝试了其他答案但仍然无法解决问题,以下方法对我有用:
右键单击包含控件的项目。 选择“属性”。 在“生成”设置类别中,确保选中“注册COM互操作”。

1
我试图构建一个仅支持x64的应用程序,所以我的平台目标当然设置为x64
然而,即使在2016年,Visual Studio (devenv.exe)仍然是一个32位进程,无法加载64位程序集。要检查您的Visual Studio的位数,请打开任务管理器并检查进程名称中是否有*32
解决工具箱中控件不可见的方法:在项目设置中将平台目标设置为Any CPU。必要时为Debug和Release构建都这样做。

1

我几个小时前也掉进了这个陷阱。
我有一个.NET 2.0 Windows应用程序项目,其中包含一些自定义用户控件;它一直运行良好。所以我决定将我的文件排序到子文件夹中,以使我的项目更加清洁。
之后,Visual Studio 2010设计器停止加载我的表单,工具箱也不再显示我的控件。
我感到很慌张,将源文件移回项目根目录,重置工具箱,但似乎没有任何作用。之后,我想起我使用了ReSharper的“删除未使用的引用”,所以我尝试重新添加未使用的引用,特别是System.Data:问题解决了!:O 我不能告诉你为什么,但这对我有效。
希望我的经验能帮助其他人。 :)
再见,Nando


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接