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


71

我在ProjectA中创建了一些UserControl。我有ProjectB,它具有要放置控件的Windows窗体。这两个项目都在一个解决方案中。在ProjectB中有一个对ProjectA的引用,因此它可以“查看” UserControls。

但是,UserControls没有显示在工具箱中,我无法拖动到Windows窗体。

我尝试过重建。我还删除了“ bin”目录以强制全部重建。

如何使VS2008用我的UserControl填充工具箱?


5
我的UserControl中有一个Parameter类型,即MyControl <T>,这意味着VS不会在工具箱中显示该控件。一旦摆脱了type参数,一切都会自动正常运行。
liwp 2011年

Answers:


80

检查此设置:

工具>选项> Windows窗体设计器>常规:AutoToolboxPopulate

为此,应将其设置为True。


13
在VS2010中,默认情况下启用此选项。不过,请记住在查看工具箱之前先编译项目。如果尚未编译,即使启用此选项,它也不会出现在列表中。
科林

您所说的“编译”是什么意思?我是VS和.NET的新手...我对这个术语不熟悉。你能澄清一下吗?
creativeedg10

6
@Corin而且,即使您确实启用了此选项进行编译,也有一半时间,控件仍不会显示在工具箱中。否则它可能会显示一段时间,然后神秘地消失(并且无需重新编译即可对其进行纠正)。
weberc2

3
在VS 2014 CTP中,默认情况下此选项未设置为True ...非常烦人。
Colin Basnett 2014年

1
还请确保您的.net框架与您打算在其中使用的托管项目匹配。最后,删除所有在实际用户控件中未使用的测试表单。这些对我来说都是因素。
Rudy Hinojosa 2015年

32
  1. 构建您的项目以确保它可以编译。

  2. 使用您要用户控制的表单,打开工具箱,右键单击并选择“选择项目”

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

  4. 确保您的用户控件旁边有一个勾号,请按OK。

  5. 您的用户控件应出现在工具箱中,因此将其拖到您的窗体上。

这是根据卡兰努斯对类似问题的回答改编而成


它起作用了,但是我不得不在步骤2和3之间取消选中UserControl。谢谢。
伊凡·费雷尔

在Visual Studio 2012中出现了此问题。.认为他们可以在几个版本后解决这个问题。
ScottN

它为我工作;Thx
Blood-HaZaRd 2014年

第二步“选择项目” >>浏览>>选择dll为我完成了窍门
Martin

20

就我而言,已经设置了AutoToolboxPopulate(Visual C#2010 Express)。

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


1
我必须做同样的事情,除了在我的情况下,它们是灰色的,即无法使用。
glenneroo

4
如果您显示“全部显示”,但显示为灰色(即您无法使用/添加),则检查您的类定义。我只是从小部件继承来自定义某些行为,但是默认的类定义没有访问修饰符,因此private默认情况下是并且因此未显示。让它public和它出现!显而易见,但容易忽略。
IBBoard

显示所有内容对我来说很有趣,因为它显示为灰色“文本:<控件.cs文件的路径”,但无法使用。为什么安装不正确。
迪恩·希勒

这也将是灰色显示,如果它不实现IComponent的 msdn.microsoft.com/en-us/library/fw694kde(v=vs.80).aspx
smirkingman

我在2012年尝试了此操作,但我的控件仍然没有显示,我不得不做Don Kirkby的回答。
ScottN

11

到目前为止,我对用户控件未显示在工具箱中没有任何问题。构建项目,它就会显示出来。然后今天不工作。经过搜索,我经历了跟随,但仍然没有喜悦。

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

因此,经过数小时的尝试使它无法成功运行之后,我创建了一个接受默认名称的新WPF Windows项目并添加了一个usercontrol。构建项目后,用户控件将如常显示。

然后,我认为我的项目或wpf窗口文件可能有问题。删除了该项目,创建了一个新项目并添加了一个新控件。建立了项目,但是没有成功。

我唯一不同的是为该项目选择一个名称,该名称在“ WPF Application”名称中包含一个空格。

再次删除该项目,并在没有空格的情况下再次创建一个名为“ WPFApplication”的新项目,并添加了一个用户控件。构建它并显示用户控件。

如果希望用户控件在构建时自动显示在工具箱中,请不要在项目名称中使用空格。希望这篇文章可以节省别人的大量时间。


非常高兴您发现了这个问题并发表了答案,谢谢!我的控件也没有出现。重命名项目(在项目名称中删除空格)并重新生成后,控件立即显示在工具箱中。
Jorrit Reedijk 2012年

6

用户控件可能不会显示在工具箱中的另一个原因是,如果它们没有默认的构造函数。


5

还要仔细检查您的用户控件是否具有有效的命名空间。

我只是发现没有名称空间的控件未放置在工具箱中。


我还遇到了控件位于其他命名空间的问题,该命名空间没有出现在我试图添加它们的表单中,也没有出现在工具箱中。
杰夫·B


3

我有同样的问题。经过大量的搜索之后,我什么都没找到,但是偶然发现我如果在创建用户控件的同一项目中单击工具箱,然后选中“显示全部”,然后选择一个与项目名称相同的名称将显示在工具箱的顶部,您可以在其中找到用户控件。现在,您可以在所需的表单上添加控件!


3

对于可能正在与之一起工作的人ToolStripItems(例如ToolStripStatusLabel),要真正使派生的控件显示在下拉菜单中(例如的StatusStrip),您需要将类设置为public然后构建解决方案。

同样不要忘记您的类的designer属性,如下所示:

using System.Windows.Forms.Design;

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

花了我一段时间才做对。希望这可以节省别人的时间。


+1表示“您需要将类设置为public,然后构建解决方案。” 不要忘记将任何服务器/用户控件类设置为public,否则它将不会显示在工具箱中。
Soenhay,2012年

3

我的控件是公开的,它在“选择工具箱项”对话框中被选中,但仍未显示。

这终于对我有用:

右键单击工具箱中的某个位置,然后单击“选择项目”。当我找到我的物品时,它已经被检查。然后,我取消选中该项目并单击“确定”。接下来,我再次右键单击工具箱并搜索我的项目...它不见了,所以我单击了浏览,导航到obj / x86 / debug文件夹并选择了我的exe。该项目然后被正确添加到工具箱。

我认为这是VS错误。


这也为我工作。我也在为x86构建。也许那是共性。但是,将控件添加到窗体后,出现了“按文件夹加载对象错误”:“对象引用未设置为对象的实例。”
Joe Schrag 2014年

第二个错误竟然是代码试图在设计模式运行:stackoverflow.com/questions/9901987/...
乔·施拉格

3

除了已经给出的所有说明(工具>选项> Windows窗体设计器>常规:AutoToolboxPopulate)+您需要构建解决方案(这对我来说是显而易见的),您可能必须注意类访问修饰符:必须上市。我只是创建了一个控件,而没有出现在工具箱列表中,我也不知道为什么。所以设定后

public class  yourClass:control {}

比列表中显示的要多。;)希望这会对他人有所帮助。


2

检查您的构建输出目录。如果出于某种原因要在项目bin \目录之外的其他位置构建输出,则控件将不会显示在工具箱中。


2

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


1

以上所有可能失败。

我通过创建一个新的用户控件(TestControl)对其进行了修复,它触发了Visual Studio将我项目的“控件”选项卡+控件重新添加到“工具箱”中。然后我只是删除了测试控件。

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


1

我通常要做的是创建一个新选项卡,然后将exe / dll添加到该选项卡...由于加载时间和一般的麻烦,我对该解决方案不太满意。

一位朋友向我展示了一种加快速度的方法。对于您制作的每个新控件,无需在工具箱等中单击“选择项目...”,您可以创建一个名为的文件,MyCustomControls然后可以在其中创建自定义控件。

现在,您只需要执行“选择项目...”并一次添加此文件即可。如果以后决定添加新控件,请在其中创建MyCustomControls然后重新构建。
然后,您的工具箱将具有新控件。(如果有,它将以常规编译自动显示AutoToolboxPopulate认为)

不幸的是,因为通常您希望将类分为“每个文件一个类”。仅仅因为VS不想按照自己的方式去做,就不得不毁了代码体系,这太可怕了。:)

我对这个解决方案也不是很满意,但是如果您需要快速执行某项操作,而又不必关心文件中的多个用户控件或者只是懒惰,那么这可能很适合您。:)


1

好吧,除了这有效之外,什么都没有为我工作。

  1. 我在解决方案中创建了一个新项目,该项目可以正常工作,因此我将开始使用该项目。
  2. 反复播放,我开始调整csproj文件的xml,以找出同一解决方案中其他项目的问题,然后我将其重置,因为它似乎无法正常工作
  3. 现在在我的项目中再次神奇地工作

这不是一个很好的解决方案,但是您应该尝试执行以下步骤

  1. 查看它是否适用于全新的解决方案/项目。
  2. 查看它是否可以在同一解决方案中的全新项目中使用
  3. 如果#2起作用了,也许比较.csproj文件...在我这样做的同时,我的某种方式又开始起作用了(这非常令人沮丧)。

1

提供您已经尝试修改的内容:

  • 工具>选项> Windows窗体设计器>常规:AutoToolboxPopulate
  • 工具>选项>文本编辑器> XMAL>其他:AutoToolboxPopulate
  • 创建一个默认的构造函数
  • 构建项目/重置工具箱并手动添加选项卡

但是您仍然看到它变灰了。

检查您的路径长度,并检查绝对路径中使用的字符

我有一个项目驻留在“ C:\ Users \ myName \ myCompany \ R&D \ Projects”中
,几个小时后才发现“ R&D”是问题所在。
”不允许在我的工具箱


1

几个小时前,我掉进了这个陷阱。
我有一个带有一些自定义UserControl的.NET 2.0 Windows应用程序项目;工作正常。因此,我决定在子文件夹中订购文件,以使我的项目更加整洁。
在那之后,Visual Studio 2010设计器停止加载我的表单,并且ToolBox将不再显示我的控件。
我吓坏了,将源文件移回项目根目录,重新设置了ToolBox,但似乎没有任何效果。之后,我记得我使用过ReSharper的“删除未使用的引用”,所以我尝试放回未使用的引用,尤其是System.Data:问题已解决!:O我不能说你为什么,但这对我有用。
希望我的经验可以帮助别人。:)
再见,南度



1

如果您尝试遵循所有其他答案,但仍然无法使用,请使用以下内容为我解决:

  • 右键单击包含控件的项目。
  • 选择 Properties
  • Build设置类别中,确保Register for COM interop已选中。

1

在我的情况下,错误的原因是控件的.dll路径的长度过长。我缩小了一点,一切都正常了。

我还发现路径中的特殊符号(例如,我使用了#)会影响控件的显示。

希望它能解决问题。


1

我试图构建仅x64应用程序,因此我的平台目标设置为 x64当然。

但是,即使在2016年,Visual Studio(devenv.exe)仍然是32位进程,并且无法加载64位程序集。要检查Visual Studio的位数,请打开“任务管理器”并检查*32在进程名称中进行。

解决方法,以在工具箱中查看控件:Any CPU在项目设置中将平台目标设置为。如有必要,请执行此操作以进行调试和发布。


0

在您的UserControl中,确保将New声明为Public。如果只是声明为Sub New(默认为Friend),则不会显示。


0

症状1:窗体,用户控件和组件的设计视图失败!

  • 我的表单设计视图失败,带有味精“找不到'用户控件'。”
  • 如果我可以使Form设计视图正常工作,那么它非常不稳定,并且在进行任何更改后都被破坏了。

症状2:工具箱中的UserControl和组件

  • 在工具箱中显示为灰色,并显示乱码
  • 工具箱上下文菜单中的“选择项目”显示名称乱码,没有命名空间

解决方案:在UserControl和组件后面的vb中将范围设置为Public


0

检查项目路径,避免等。

我已经将解决​​方案从drive:\work\c#\folder\转移到drive:\work\folder,它解决了问题。


0

当我尝试将UserControl添加到工具箱(右键单击工具箱,选择项目,选择我的DLL)时,它将显示一条消息,指出DLL中没有控件。

无论如何,通过尝试在VS中的DLL中创建一个表单并添加UserControl,解决了该问题。显示一条错误消息,说明没有默认构造函数

public UserControl() {
...
}

设计人员需要此功能,因为它不知道什么是有效参数。将空白构造函数添加到UserControl后,它便毫无问题地添加到了工具箱中。


0

如此处所述您应该告诉Visual Studio将用户控件加载到工具箱中。

[ToolboxItem(true)]
public class PanelTitle : LabelControl  {
// Whatever code to override LabelControl here...
}

0

在尝试添加自定义控件之前,请确保它与当前项目的.Net版本兼容。

我试图在VS2008上为Windows CE 5.0和.Net Compact v3.5的项目的工具箱中添加自定义控件。我做了所有先前的建议,但没有任何效果。控制时显示“全部显示”被选中,但它是灰色的,甚至在“选择项”菜单中选择了。

我使用.Net v2.0创建了一个新项目,它运行良好。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.