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

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

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

83

请检查这个设置:

工具(Tools) > 选项(Options) > 窗体设计器(Windows Forms Designer) > 常规(General): 自动填充工具箱(AutoToolboxPopulate)

它应该被设置为True以使此功能生效。


13
在VS2010中,此选项默认启用。不过,在查看工具箱之前,请记得编译您的项目。如果您没有编译它,即使启用了此选项,它也不会出现在列表中。 - Corin
"Compile" 是什么意思?我刚接触 VS 和 .NET...对这个术语不熟悉。你能解释一下吗? - creativeedg10
@creativeedg10,编译就是构建(或重新构建)。它将您的代码转换为计算机可以运行的内容。除非您更改了设置,否则在运行之前,您的代码将自动编译。 - Ryan Lundy
7
@Corin,有时候即使你启用了这个选项进行编译,你的控件也有可能只出现一半,甚至根本不会在工具箱中显示。或者它可能会出现一段时间,然后神秘地消失(重新编译也无济于事)。 - weberc2
3
在VS 2014 CTP中,默认情况下未将此选项设置为True...非常烦人。 - Colin Basnett
1
同时确保您的 .net 框架与您打算在其中使用此框架的托管项目相匹配。最后,在您的实际用户控件中删除任何未使用的测试表单。这些是我考虑的因素。 - Rudy Hinojosa

34
  1. 构建项目以确保它能够编译。

  2. 在您想要用户控件的表单上,打开工具箱,右键单击并选择“选项”。

  3. 浏览到您在步骤1中编译的.exe或.dll。

  4. 确保您的用户控件旁边有一个勾号,然后按“确定”。

  5. 您的用户控件应该出现在工具箱中,所以将它拖放到您的表单中。

这是从Calanus对类似问题的回答改编而来的.


它起作用了,但我必须在第2步和第3步之间取消选中UserControl。谢谢。 - Ivan Ferrer Villa
在Visual Studio 2012中遇到了问题...想必他们在几个版本之后就能解决这个问题了。 - ScottN
它对我有效;谢谢 - Blood-HaZaRd
第二步“选择项目”>>浏览>>选择dll对我很有帮助。 - Martin

21

在我的情况下,AutoToolboxPopulate已经设置好了(Visual C# 2010 Express)。

但是,我必须从工具箱的属性中激活“显示全部”(右键单击),才能真正看到我的新用户控件。


2
我必须做同样的事情,只不过在我的情况下它们变成了灰色,即无法使用。 - glenneroo
4
如果你点击“显示全部”,但它是灰色的(即不能使用或添加),那么请检查你的类定义。我刚继承了一个小部件以自定义一些行为,但默认的类定义没有访问修饰符,因此是私有的,因此默认情况下不会显示出来。把它设为“公共”的就行了!这很明显,但很容易被忽视。 - IBBoard
展示所有对我来说很有趣,因为它显示了一个灰色的“文本:<控件.cs文件路径>”,但是无法使用。为什么它不能正确安装? - Dean Hiller
如果它没有实现iComponent,它也将变为灰色。http://msdn.microsoft.com/en-us/library/fw694kde(v=vs.80).aspx - smirkingman
我在2012年尝试过这个,但我的控件仍然没有显示出来,我不得不采用Don Kirkby的答案。 - ScottN

11

到目前为止,我没有关于用户控件不显示在工具箱中的问题。构建项目时它会自动显示出来。但今天却突然失效了。我尝试了以下解决方法,但仍然无法解决:

  • 工具 > 选项 > 窗体设计器 > 常规 : AutoToolboxPopulate
  • 工具 > 选项 > 文本编辑器 > XMAL > 其他 : AutoToolboxPopulate
  • 将VS设置重置为默认值

所以经过几个小时的尝试却毫无进展,最后我创建了一个新的WPF窗口项目并使用默认名称添加了一个用户控件。构建该项目后,用户控件就像以前一样出现了。

我开始怀疑我的项目或WPF窗口文件可能有问题。因此删除了该项目,重新创建了一个新项目并添加了一个新控件。但构建项目后仍然未能解决问题。

唯一与之前不同的是我给项目取了一个带空格的名称:“WPF 应用程序”。

我再次删除该项目,重新创建了一个名为“WPFApplication”的项目而没有空格,并添加了一个用户控件。构建该项目后,用户控件正常出现。

如果您希望用户控件在构建时自动显示在工具箱中,请勿在项目名称中使用空格。希望本文可以帮助其他人节省大量浪费的时间。


非常高兴你找到了答案并且发表了你的回答,谢谢!我也有一些控件没有显示出来。在重命名项目(移除项目名称中的空格)并重新构建后,这些控件立即出现在工具箱中。 - Jorrit Reedijk

6

用户控件未显示在工具箱中的另一个原因是它们没有默认构造函数。


5
通常情况下,您需要构建解决方案。这对我来说几乎总是有效的。

5
请确保您的用户控件具有有效的命名空间。我发现没有命名空间的控件不会出现在工具箱中。

我也遇到了一个问题,就是控件所在的命名空间与我要添加它们的窗体不同,因此无法在工具箱中显示。 - Jeff B

3

如果您正在使用 ToolStripItems(如ToolStripStatusLabel),想要让您的控件显示在下拉菜单中(例如来自StatusStrip的菜单),您需要将类设置为 public,然后构建解决方案。

同时不要忘记为您的类添加设计器属性,像这样:

using System.Windows.Forms.Design;

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.StatusStrip)]
public class MyStatusLabel : ToolStripStatusLabel
{
}

花了我一段时间才搞明白。希望这能够节省其他人的时间。

+1 for "you need to set the class to public then build the solution." Don't forget to set any Server/User control class to public or it won't show up in the toolbox.请将类设置为公共类并构建解决方案。不要忘记将任何服务器/用户控件类设置为公共类,否则它们将无法显示在工具箱中。 - Soenhay

3
我的控件是公共的,在“选择工具箱项”对话框中已经勾选,但仍然没有显示出来。
以下是最终解决方法:
在工具箱中任意位置右键单击,选择“选择项目”。当我找到我的项目时,它已经被勾选了。然后我取消勾选该项目并点击“确定”。接下来,我再次右键单击工具箱并搜索我的项目……它已经消失了,所以我点击“浏览”,导航到obj/x86/debug文件夹并选择我的exe文件。然后该项目就正确地添加到了工具箱中。
我认为这是VS的一个bug。

这对我也起作用了。我也在构建x86。也许这就是共同点。不过,在我将控件添加到表单后,我收到了一个“通过文件夹加载对象时出错”的错误:“对象引用未设置到对象的实例”。 - Joe Schrag
第二个错误原来是代码试图在设计模式下运行:http://stackoverflow.com/questions/9901987/error-when-adding-user-defined-control-to-a-form - Joe Schrag

3

我曾经遇到过同样的问题。在大量搜索后,我没有找到任何解决方法,但偶然间我发现,在你创建用户控件所在的同一项目中,当你单击工具箱并勾选“显示全部”时,一个与你的项目同名的组将出现在工具箱的顶部,你可以在其中找到你的用户控件。 现在你可以将你的控件添加到你想要的表单中了!


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