カスタムコントロールを使いやすくする(C#版)

カスタムコントロールのプロパティに「カテゴリー」や「説明文」を追加して、使いやすくする方法
追加方法の説明なので、作成するプログラムに特に意味はありません。

作業環境

OSWindows 11 Pro 22h2
開発ツールVisual Studio 2022 Version 17.3.5
作業環境

準備

TextBoxを継承したユーザーコントロールを作成します。

using System;
using System.Drawing;
using System.Windows.Forms;

using System.ComponentModel;

namespace CustomControlDemo
{
    public partial class CustomTextBox : TextBox
    {
        public CustomTextBox()
        {
            InitializeComponent();
        }
    }
}

設定を追加しない場合

using System;
using System.Drawing;
using System.Windows.Forms;

namespace CustomControlDemo
{
    public partial class CustomTextBox : TextBox
    {
        /// <summary>
        /// テキストの入力が必須かどうか
        /// </summary>
        public Boolean IsRequired { get; set; } = false;

        public CustomTextBox()
        {
            InitializeComponent();
        }
    }
}

プロパティウィンドウの表示

項目は表示されるが、「その他」に分類されて、「説明」も表示されない。

設定を追加した場合

using System;
using System.Drawing;
using System.Windows.Forms;

using System.ComponentModel;        // <1>

namespace CustomControlDemo
{
    public partial class CustomTextBox : TextBox
    {
        /// <summary>
        /// テキストの入力が必須かどうか
        /// </summary>
        [Category("カスタム")]                           // <2>
        [Description("テキストの入力が必須かどうか")]      // <3>
        [DefaultValue(false)]                           // <4>
        public Boolean IsRequired { get; set; } = false;

        public CustomTextBox()
        {
            InitializeComponent();
        }
    }
}

<1> 必要な using を追加します。
<2> プロパティウィンドウに表示するカテゴリーを記述します。
<3> プロパティの説明を記述します。
<4> プロパティの規定値を指定します。
規定値の指定は、「文字列」、「数値」、「真偽(bool)」が設定できます。
色などを指定する場合は、おまけを参照。

プロパティウィンドウの表示

おまけ

プロパティの規定値 (DefaultValue) で色を指定する場合、typeof( ) を利用して記述します。

using System;
using System.Drawing;
using System.Windows.Forms;

using System.ComponentModel;

namespace CustomControlDemo
{
    public partial class CustomTextBox : TextBox
    {
        /// <summary>
        /// テキストの正常時の背景色
        /// </summary>
        [Category("カスタム")]
        [Description("テキストの正常時の背景色")]
        [DefaultValue(typeof(Color), "Empty")]
        public Color NormalColor { get; set; } = Color.Empty;

        public CustomTextBox()
        {
            InitializeComponent();
        }
    }
}