【C#】WindowsFormsアプリでUserControlの簡単なサンプル(プロパティの情報加工編)

自作のクラスにプロパティ(属性)を宣言している場合を考えてみます
そのプロパティは、もちろん意味を持っていますね

プロパティのアトリビュートとは

プロパティのアトリビュート(Attributes)は、C#や.NETなどのプログラミング言語およびフレームワークで使用される、プログラムの構造や動作を制御・設定するためのメタデータ情報です。アトリビュートは、コード内に付加される注釈のようなものであり、実行時にプログラムの動作や振る舞いを変更する際に使用されます。具体的には、プロパティの振る舞いや表示方法をカスタマイズするために使用されることがあります。

アトリビュートは [AttributeName] のような形式でプロパティやクラスなどに適用され、括弧内にそのアトリビュートに関する情報が指定されます。プロパティの場合、アトリビュートはそのプロパティがどのように表示され、操作されるかを制御します。

Windows Formsアプリケーションにおいて、プロパティのアトリビュートはプロパティグリッド(プロパティウィンドウ)に表示されるプロパティの表示方法や動作をカスタマイズするために使用されます。アプリケーションのデザインやユーザーエクスペリエンスの向上に役立ちます。

具体的なプロパティのアトリビュートは、[Browsable][Category][Description][DefaultValue][DisplayName][ReadOnly][Editor][TypeConverter] などがあります。これらのアトリビュートを使用することで、プロパティの外観や動作を制御し、ユーザーがより直感的に操作できるようにすることができます

どのように使うのか

ここでは、前回で作成したサンプルをもとにアトリビュートを付加していきます

前回の自作コントロールのサンプル

Playerクラスにプロパティとアトリビュートを追加

難しく感じると思いますが、Scoreプロパティ(属性)を追加しており、その装飾として2つのアトリビュートが追加されていると考えてください

Categoryアトリビュートの例

グループ分けするグループの名称になります
すでにそのグループが存在している場合、そのグループに入ります

[Category("ユーザー属性")]
public int Score { get; set; }

Descriptionアトリビュートの例

プロパティに関する説明文を記述します
プロパティ選択時にウィンドウの下に表示されます

[Description("プレイヤーの得点を保持しています")]
public int Score { get; set; }

コード

では、実際に前回のコードに追加してみましょう
上記2つのアトリビュートを追加します。追加はプロパティの上に2行並べただけです

ここでは、Playerクラスを部分抜き出していますので、usingや名前空間などは省略されています
注意してください

変更を反映させるために「ソリューションのビルド」を実行してください

public partial class Player : UserControl
{
    [Category("ユーザー属性")]
    [Description("プレイヤーの得点を保持しています")]
    public int Score { get; set; }

    public Player()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = "Hello, World";
    }
}

windows formsアプリでプロパティウィンドウに表示するアトリビュート

メジャーなアトリビュート

  1. [Browsable] アトリビュート: このアトリビュートは、プロパティグリッドに特定のプロパティを表示するかどうかを制御します。デフォルトでは、すべてのパブリックなプロパティが表示されますが、表示させたくないプロパティには [Browsable(false)] を設定します。
[Browsable(false)]
public int HiddenProperty { get; set; }
  1. [Category] アトリビュート: このアトリビュートは、プロパティをグループ分けして表示するためのカテゴリを指定します。
[Category("Custom Category")]
public int CategorizedProperty { get; set; }
  1. [Description] アトリビュート: このアトリビュートは、プロパティに関する説明を提供します。プロパティを選択した際に説明が表示されます。
[Description("This is a description for the property.")]
public string DescriptiveProperty { get; set; }
  1. [DefaultValue] アトリビュート: このアトリビュートは、プロパティの初期値を指定します。プロパティグリッドでリセットボタンを押した際に、この初期値に戻されます。これは、VisualStudioで使われるので、初期値は、コンストラクタ等で代入する必要があります
[DefaultValue(42)]
public int DefaultValuedProperty { get; set; }

これらの属性を使用してプロパティの表示と動作をカスタマイズできます。ただし、これは基本的な属性の設定方法であり、複雑なカスタマイズや特定の挙動を持つプロパティを実装する場合は、カスタムコントロールの作成や更なる属性の使用が必要かもしれません

その他のアトリビュート

  1. DisplayName] アトリビュート: このアトリビュートは、プロパティグリッドに表示されるプロパティの名前をカスタマイズします。
[DisplayName("Custom Display Name")]
public string CustomNamedProperty { get; set; }
  1. [ReadOnly] アトリビュート: このアトリビュートは、読み取り専用のプロパティを示します。プロパティグリッドにおいて、これらのプロパティは編集できなくなります。
[ReadOnly(true)]
public string ReadOnlyProperty { get; set; }
  1. [Editor] アトリビュート: このアトリビュートは、プロパティの編集に使用されるエディタをカスタマイズします。例えば、カラーピッカーなど特定の編集コントロールを指定できます。
    using System.Drawing.Design;名前空間の追加が必要です(インテリセンスで追加してもらいましょう)
[Editor(typeof(ColorEditor), typeof(UITypeEditor))]
public Color CustomColor { get; set; }
  1. [BrowsableEditor] アトリビュート: このアトリビュートは、特定のプロパティを編集するためのエディタをカスタマイズします。
[BrowsableEditor(true)]
public string EditableByCustomEditor { get; set; }
  1. [TypeConverter] アトリビュート: このアトリビュートは、プロパティの型変換方法をカスタマイズします。例えば、文字列から特定のオブジェクト型への変換方法を指定できます。
[TypeConverter(typeof(MyCustomConverter))]
public MyCustomType CustomConvertedProperty { get; set; }