ツールボックスでコントロールのアイコンを設定する (Windows フォーム .NET)

作成したコントロールには、Visual Studio の [ツールボックス] ウィンドウの汎用アイコンが常に表示されます。 ただし、アイコンを変更すると、コントロールにプロフェッショナル感が加わり、ツールボックス内で目立つようになります。 この記事では、コントロールのアイコンを設定する方法について説明します。

ビットマップ アイコン

Visual Studio の [ツールボックス] ウィンドウのアイコンは、特定の標準に準拠する必要があります。そうしないと、無視されるか、正しく表示されません。

  • サイズ: コントロールのアイコンは、16 x 16 ビットマップ画像にする必要があります。
  • ファイルの種類: アイコンには、ビットマップ (.bmp) または Windows アイコン (.ico) ファイルのいずれかを指定できます。
  • 透明度: マゼンタ色 (RGB: 255,0,255、16 進数: 0xFF00FF) が透過してレンダリングされます。
  • テーマ: Visual Studio には複数のテーマがありますが、各テーマは濃色または淡色と見なされます。 アイコンは淡色テーマ用にデザインする必要があります。 Visual Studio で濃色テーマが使われている場合、アイコンの濃色と淡色は自動的に反転されます。

アイコンを割り当てる方法

アイコンは、ToolboxBitmapAttribute 属性を持つコントロールに割り当てられます。 属性の詳細については、「属性 (C#)」または「属性の概要 (Visual Basic)」を参照してください。

ヒント

サンプル アイコンを GitHub からダウンロードできます。

この属性はコントロールのクラスに設定され、3 種類のコンストラクターがあります。

  • ToolboxBitmapAttribute(Type) - このコンストラクターは単一の型参照を受け取り、その型からアイコンとして使う埋め込みリソースを見つけようとします。

    その型の FullName は、{project-name}.{namespace-path}.{type-name}{.bmp|.ico} の形式で、その型のアセンブリ内の埋め込みリソースの検索に使用されます。 たとえば、MyProject.MyNamespace.CompassRose 型が参照されている場合、属性は MyProject.MyNamespace.CompassRose.bmp または MyProject.MyNamespace.CompassRose.ico という名前の埋め込みリソースを検索します。

    // Looks for a CompassRose.bmp or CompassRose.ico embedded resource in the
    // same namespace as the CompassRose type.
    [ToolboxBitmap(typeof(CompassRose))]
    public partial class CompassRose : UserControl
    {
        // Code for the control
    }
    
    ' Looks for a CompassRose.bmp or CompassRose.ico embedded resource in the
    ' same namespace as the CompassRose type.
    <ToolboxBitmap(GetType(CompassRose))>
    Public Class CompassRose
        ' Code for the control
    End Class
    
  • ToolboxBitmapAttribute(Type, String) - このコンストラクターは 2 つのパラメーターを受け取ります。 最初のパラメーターは型であり、2 つ目のパラメーターはその型のアセンブリ内の埋め込みリソースの名前空間と名前です。

    // Loads the icon from the WinFormsApp1.Resources.CompassRose.bmp resource
    // in the assembly containing the type CompassRose
    [ToolboxBitmap(typeof(CompassRose), "WinFormsApp1.Resources.CompassRose.bmp")]
    public partial class CompassRose : UserControl
    {
        // Code for the control
    }
    
    ' Loads the icon from the WinFormsApp1.Resources.CompassRose.bmp resource
    ' in the assembly containing the type CompassRose
    <ToolboxBitmap(GetType(CompassRose), "WinFormsApp1.Resources.CompassRose.bmp")>
    Public Class CompassRose
        ' Code for the control
    End Class
    
  • ToolboxBitmapAttribute(String) - このコンストラクターは、アイコン ファイルへの絶対パスという 1 つの文字列パラメーターを受け取ります。

    // Loads the icon from a file on disk
    [ToolboxBitmap(@"C:\Files\Resources\MyIcon.bmp")]
    public partial class CompassRose : UserControl
    {
        // Code for the control
    }
    
    ' Loads the icon from a file on disk
    <ToolboxBitmap("C:\Files\Resources\MyIcon.bmp")>
    Public Class CompassRose
        ' Code for the control
    End Class