在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文件,如果你手動添加同一文件,卻是會顯示自定義圖標的!很奇怪的問題啊,有哪位仁兄知道如何解決這個自動添加不能顯示自定義圖標的問題麼?