Winフォームアプリで、カウンター表示付きボタンコントロールの自作

2022年7月25日

オブジェクト指向の考え方の練習シリーズです
標準コントロールのButtonを継承して、インスタンスを作成することでオブジェクト指向のメリットをみていきましょう

コントロールの自作について、次の内容を事前に確認しておきましょう

上記を参考にButtonクラスを拡張して自作のクラスを作ってみます

オブジェクト指向言語では、このように元となるクラス(基底クラス)を拡張してクラスを作ることを継承と呼びます

どのような機能を持たせるか?

ボタンをクリックするとカウントがアップ(カウンタの値は、ボタンの上に表示される)する機能を実現してみましょう

コード

クラスの作成

クラス名をConterShowButtonとします。
System.Windows.Forms名前空間のButtonクラスを継承します
このButtonクラスは、ツールボックスからドラッグ&ドロップするButtonコントロールの元となるクラスです
新しく作ったクラスは、Buttonクラスが持つプロパティやメソッド(イベント含む)を使うことができます

using System.Windows.Forms;

namespace CustomButton
{
    internal class CounterShowButton : Button
    {
    }
}

プロパティの追加

続いて、カウンターの値を保持するCounterShowButtonプロパティを追加しましょう

using System.Windows.Forms;

namespace CustomButton
{
    internal class CounterShowButton : Button
    {
        public int Counter { get; set; }
    }
}

カウンターの表示、インクリメントメソッドの追加

カウンターの値を表示し、その後インクリメントするShowCounterメソッドを追加しましょう

using System.Windows.Forms;

namespace CustomButton
{
    internal class CounterShowButton : Button
    {
        public int Counter { get; set; }

        public void ShowCounter()
        {
            Text = Counter++.ToString();
        }
    }
}

ボタンのクリックイベントの追加

ボタンをクリックした時に実行されるイベントハンドラをコンストラクタに追加してみましょう

using System.Windows.Forms;

namespace CustomButton
{
    internal class CounterShowButton : Button
    {
        public CounterShowButton()
        {
            Click += CounterShowButton_Click;
        }

        private void CounterShowButton_Click(object sender, System.EventArgs e)
        {
            ShowCounter();
        }

        public int Counter { get; set; }

        public void ShowCounter()
        {
            Text = Counter++.ToString();
        }
    }
}

VisualStudioの自作コントロールが反映されるのを確認

ソリューションをビルド

ここで、一度ソリューションのビルドを実行してみましょう

ツールボックスにコントロールが追加されるのを確認

Form1.cs[デザイン]を選択すると、ツールボックスに次のようなコントロールが追加されていると思います

コントロールがドラッグ&ドロップできるのを確認

フォームにドラッグ&ドロップすると、コントロールが配置されます
Buttonコントロールを配置するときと同じですよね

プロパティ情報の確認

プロパティを見てみましょう
追加したCounterプロパティが表示されています

実行

実行して動作を確認します

他のソリューションでも使えるライブラリの作成