让我的userControl在工具箱上有自己的图标

时间:2009-07-22 06:30:54

标签: c# .net vb.net winforms controls

我制作了一个直接从ErrorProvider继承的控件。我认为应用它的ToolboxBitmap属性足以让我的控件在工具箱上拥有与原始控件相同的图标,但事实并非如此。奇怪的是,就好像我将控件添加到窗体中一样,它会像它应该的那样出现,但它不会改变工具箱的图标。我在这里错过了什么?我已经重新启动了visual studio并保持了这种行为。

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

4 个答案:

答案 0 :(得分:5)

在Visual Studio 2008中,出于性能原因,ToolBoxBitmap指定的图标未添加到当前解决方案中任何组件的工具箱中。使用标准的“齿轮”图标。如果通过“工具箱”...“添加项目...”对话框手动添加装配,将显示自定义图标,这是您遇到的行为。此外,当您将ErrorProviderEx拖到表单时,将使用您指定的图标,这也是您在评论中记下的行为。

注意,在您的情况下,您使用的是typeof(ErrorProvider),因此您不会遇到使用自定义位图的常见问题。

(Visual Studio 2005也可能出现这种情况.Visual Studio 2003通过显示图标来破坏我们。)(我个人不喜欢这种新行为。我愿意等待额外的一两秒钟来使用IDE检索解决方案中所有控件和组件的图标。我想知道是否有一个注册表黑客来显示图标。)

答案 1 :(得分:2)

是否在同一个项目中?或者你引用的dll?

在引用固定的dll时,您只能获得正确的图标。尝试构建一个控件dll并引用它。

答案 2 :(得分:1)

所以有一个解决方法。假设您的UserControl位于“MyControl”项目中,请为其自身添加引用。那就是:在MyControl项目中参与MyControl项目,就像在其他项目中一样。然后该图标也将显示在该MyControl项目的工具箱中。

答案 3 :(得分: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文件引用了正确的名称。

无论是手动添加控件还是以编程方式添加控件,都会在控件添加到工具箱时显示位图。