在ASP.net应用的过程中,少不了的会创建一些自定义服务器控件,但控件完成后,默认的图标是统一的蓝色齿轮的图标,没有个性,也不能很好的直观表示控件的作用,这时我们需要自己添加自定义的工具图标。
自定义图标为16像素宽高,256色的BMP图片,并设置图标文件的BuildingAction(生成操作)属性为嵌入的资源,但我们添加完成后在工具箱里显示不了自定义图标,这与我们类文件的名称空间有关。
例一:
说明:控件未定义名称空间,图标文件名与控件的名称一致
控件集名称为:MyControls.dll
控件名称为:MyBox(未自定义名称空间)
图标名称为:MyBox.bmp
MyBox添加元数据(此结构下也可以不添加元数据,默认会查找MyBox.bmp图标文件,网上大多是这样介绍的)
<ToolboxBitmap(GetType(MyBox), "MyBox.bmp">
在工具箱中添加此控件,可以看到控件显示了自定义图标
例二:
说明:控件定义了名称空间:Boxes,图标文件名与控件名一致
控件集名称为:MyControls.dll
控件名称为:MyBox
自定义名称空间:Boxes
图标名称为:MyBox.bmp
MyBox添加元数据
<ToolboxBitmap(GetType(MyBox), "MyBox.bmp">
在工具箱中添加此控件,但这个时候控件显示的是默认的齿轮图标,而不是自定义的MyBox.bmp图标
这个时候我们要做的是重命名原来的MyBox.bmp以适应控件的名称空间:Boxes.MyBox.bmp
注意上面添加的元数据的图片name不用修改
这时再添加控件到工具箱中,又可以看到可爱的自定义图标了
例三:
说明:控件定义了名称空间:Boxes,图标文件名与控件名不相同
控件集名称为:MyControls.dll
控件名称为:MyBox
自定义名称空间:Boxes
图标名称为:Box.bmp
MyBox添加元数据
<ToolboxBitmap(GetType(MyBox), "Box.bmp">
重命名Box.bmp以适应控件的名称空间:Boxes.Box.bmp
再添加控件到工具箱中
在MSDN文档中提到:
ToolboxBitmapAttribute (t, name)
参数
t
一个 Type,将在它的定义程序集中搜索位图资源。
name
嵌入的位图资源的名称。
备注
此构造函数在定义由 t 参数指定的类型的程序集中搜索嵌入的资源。此构造函数搜索名为 namespace.name 的资源,其中 namespace 是由 t 参数指定的类的定义所在的命名空间。例如,假定 ControlA 是 AssemblyA.dll 中的 NamespaceA 的类,而且已将“MyBitmap.bmp”传递给 name 参数。则构造函数在 AssemblyA.dll 中搜索命名为 NamespaceA.MyBitmap.bmp 的资源。
在添加的时候最好是手动添加到工具箱,VS自动添加时很奇的不会显示自定义图标,它默认添加的是控件项目下的obj文件夹下的DLL文件,如果你手动添加同一文件,却是会显示自定义图标的!很奇怪的问题啊,有哪位仁兄知道如何解决这个自动添加不能显示自定义图标的问题么?