在工具箱中为我的用户控件添加自己的图标

8

我创建了一个从ErrorProvider直接继承的控件。我认为应用ToolboxBitmap属性就足以让我的控件在工具箱上拥有与原始控件相同的图标,但实际上并不是这样。很奇怪,如果我将该控件添加到窗体中,它会显示出应有的样子,但是它并没有改变工具箱的图标。我错过了什么吗?我已经重新启动了Visual Studio,但它仍然保持这种行为。

[ToolboxBitmap(typeof(ErrorProvider))]
public class ErrorProviderEx : ErrorProvider {
...
}

只是提供信息:这些控件类型是Web自定义控件(WCC),而不是Web用户控件(WUC)。 WUC是ascx文件,用于整个Web项目,而WCC是在机器范围内使用的...因此,在您的情况下,您应该在问题中编写WCC-只是为了不让其他人感到困惑。 - Robert Koritnik
1
我不知道你在说什么。这是System.Windows.Forms.ErrorProvider。 - devoured elysium
如果您提供了一个“硬编码”的位图路径(ToolboxBitmap("c:\my.bmp")),它是否仍然显示默认的位图? - Shay Erlichmen
是的,完全相同的行为。它在实际表单上的控件中有效,但在工具箱中无效。 - devoured elysium
4个回答

6
在Visual Studio 2008中,由ToolBoxBitmap指定的图标由于性能原因未添加到当前解决方案中的任何组件的工具箱中。使用标准的“齿轮”图标。如果您通过Toolbox...Add Items...对话框手动添加程序集,则会显示自定义图标,这就是您所体验到的行为。此外,当您将ErrorProviderEx拖动到表单上时,将使用您指定的图标,这也是您在评论中提到的行为。
请注意,您在本例中使用了typeof(ErrorProvider),因此您不会遇到使用自定义位图的常规问题。
(这种行为在Visual Studio 2005中也可能是正确的。 Visual Studio 2003让我们习惯了显示图标。)(我个人不喜欢这种新行为。我愿意等待额外的一两秒钟,让IDE检索解决方案中所有控件和组件的图标。我想知道是否有注册表hack可以显示图标。)

这仍然是截至VS 2010的当前行为。据我所知,没有出现任何注册表黑客。 - Cody Gray
在VS 2013中仍然是一样的。 - 27k1

2

这个问题是关于同一项目还是引用了一个dll。你只有在引用一个固定的dll时才能得到正确的图标。尝试构建一个控件dll并引用它。


啊,它在另一个项目中,但是在同一个解决方案中。所以没有解决方法吗? - devoured elysium

1

所以有一个解决方法。假设您的UserControl在“MyControl”项目中,添加对自身的引用。也就是说:像在另一个项目中一样,在MyControl项目中引用MyControl项目。然后该图标也将显示在该MyControl项目的工具箱中。


0

确保工具栏图标出现的最简单方法是创建一个16x16的bmp文件,将其放置在控件项目文件夹中,然后将其设置为嵌入式资源。

让我们按照一个相对简单的例子来操作:假设您有一个名为MyCompany.Components.MyControl的组件。创建一个16x16位图并将其保存到MyCompany.Components.MyControl项目文件夹的根目录下,命名为MyControl.bmp。然后,右键单击MyControl.bmp文件,选择属性>生成操作>嵌入式资源。此时,您还需要进行一个步骤:在类定义之前添加ToolboxBitmap属性(如果使用局部类,则将属性放置在控件的主要.cs文件中,而不是Designer.cs文件中)。要执行此操作,请使用以下语法:

[ToolboxBitmap(typeof(MyControl), "MyControl.bmp")]

请务必确保:

  • MyControl 项目类的命名空间与项目在解决方案中出现的文件夹结构相匹配。
  • 可能看起来很明显,但请确保您已引用了正确的 bmp 文件名称。

无论是手动添加还是以编程方式添加,只要将控件添加到工具箱中,您的位图就应该出现。


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