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

我创建了一个直接从ErrorProviderinheritance的控件。 我认为应用它的ToolboxBitmap属性足以让我的控件在工具箱上拥有与原始控件相同的图标,但事实并非如此。 奇怪的是,就像我将控件添加到表单一样,它会像它应该的那样出现,但它不会改变工具箱的图标。 我在这里想念的是什么? 我已经重新启动了visual studio,它保留了这种行为。

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

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

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

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

它在同一个项目中吗? 或者您正在引用的DLL?

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

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

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

让我们按照一个相对简单的例子:假设你有一个名为MyCompany.Components.MyControl的组件。 创建一个16×16位图,并将其保存到MyCompany.MyControl项目文件夹的MyControl.bmp根目录。 然后右键单击MyControl.bmp文件并选择“ 属性”>“构建操作”>“嵌入式资源” 。 此时,您还有一个步骤:在类定义上方添加ToolboxBitmap属性(如果使用部分类,我将该属性放在控件的主.cs文件中 – 而不是在Designer.cs文件中)。 为此,请使用以下语法:

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

绝对确定:

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

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