開發 ASP.NET 伺服器控制項時,預設工具箱圖示為統一的藍色齒輪,缺乏辨識度。透過 ToolboxBitmapAttribute 可指定自訂 16×16 像素、256 色 BMP 圖示,但命名空間與資源命名規則常導致圖示無法顯示。本文詳細說明兩種常見情境的正確設定方式。
.bmp 圖檔MyControls.dllMyBox(無 namespace)MyBox.bmpMyControls.MyBox.bmp(預設:專案預設命名空間 + 檔名)[ToolboxBitmap(typeof(MyBox), "MyBox.bmp")]
public class MyBox : WebControl { ... }
此情況下,ToolboxBitmap 甚至可省略,預設會依類別名稱尋找同名 .bmp。
MyControls.dllMyBoxBoxesMyBox.bmpMyControls.Boxes.MyBox.bmpnamespace Boxes {
[ToolboxBitmap(typeof(MyBox), "MyBox.bmp")]
public class MyBox : WebControl { ... }
}
關鍵點:若保持原檔名 MyBox.bmp,資源名稱會是 MyControls.MyBox.bmp,找不到 Boxes.MyBox.bmp 導致圖示失效。解決方法:將圖檔重新命名為 Boxes.MyBox.bmp(含命名空間前綴),嵌入資源後完整名稱即為 MyControls.Boxes.MyBox.bmp,與屬性指定的 "MyBox.bmp" 搭配運作。
// 偵錯時列印所有嵌入資源名稱
var asm = Assembly.GetExecutingAssembly();
foreach (var name in asm.GetManifestResourceNames()) {
System.Diagnostics.Debug.WriteLine(name);
}
| 錯誤現象 | 原因 | 修正 |
|---|---|---|
| 工具箱仍顯示齒輪 | 資源建置動作非「嵌入的資源」 | 屬性視窗 → 建置動作 = Embedded Resource |
| 有命名空間時圖示消失 | 資源名稱缺少命名空間前綴 | 重命名圖檔為 Namespace.ClassName.bmp |
| 大小寫不符 | 資源名稱區分大小寫 | 確保屬性字串與實際資源名稱大小寫一致 |