在 Visual Studio 工具箱中,自訂控制項預設顯示通用齒輪圖標,難以辨識。嵌入專屬圖標(16×16 .bmp/.ico)能:
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace MyControls
{
// 關鍵:指定圖標資源名稱 (預設命名空間.檔案名)
[ToolboxBitmap(typeof(MyCustomControl), "MyCustomControl.bmp")]
public partial class MyCustomControl : UserControl
{
public MyCustomControl()
{
InitializeComponent();
}
// 控制項邏輯...
}
}
`ToolboxBitmapAttribute` 以 **預設命名空間 + 檔案名** 尋找嵌入資源。常見情況:
| 專案預設命名空間 | 圖標檔名 | 資源完整名稱 | Attribute 寫法 |
|---|---|---|---|
| MyControls | MyCustomControl.bmp | MyControls.MyCustomControl.bmp | `"MyCustomControl.bmp"` |
| MyControls | Resources\Icon.bmp | MyControls.Resources.Icon.bmp | `"Resources.Icon.bmp"` |
| (無,根命名空間) | Icon.ico | Icon.ico | `"Icon.ico"` |
驗證技巧:編譯後用 ILSpy/reflector 查看 `.resources` 確認實際資源名稱。
.NET 4.6.2+ 支援 `ToolboxBitmapAttribute` 多載,可分別指定 16×16 與 32×32 圖標:
[ToolboxBitmap(typeof(MyCustomControl), "MyCustomControl_16.bmp")]
[ToolboxBitmap(typeof(MyCustomControl), "MyCustomControl_32.bmp", true)] // true = 32x32
public partial class MyCustomControl : UserControl { }
或實作 `IToolboxUser` 介面動態提供(較複雜,少用)。
WPF 控制項同樣適用,但建議使用 **.png** 並透過 `ToolboxBitmapAttribute` 指定:
[ToolboxBitmap(typeof(MyWpfControl), "MyWpfControl.png")]
public class MyWpfControl : UserControl { }
注意:WPF 設計器在 VS 2019+ 對 PNG 支援良好,舊版建議用 BMP。
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 工具箱仍顯示齒輪 | 資源名稱不匹配 | 檢查 Build Action = Embedded Resource;確認資源完整名稱 |
| 圖標模糊/變形 | 尺寸非 16×16 | 重新製作 16×16 圖標 |
| 重新開啟 VS 後消失 | 工具箱快取 | 右鍵工具箱 → Reset Toolbox,或刪除 `.tbd` 快取檔 |
| 類別庫專案不顯示 | 未安裝至工具箱 | 右鍵工具箱 → Choose Items → Browse 選取 DLL |
只需三步驟(加檔案、設嵌入、加 Attribute),即可讓自訂控制項在工具箱中擁有專屬形象,是元件開發的專業標配。