C#のWinFormsでUserControlでオリジナルのイベント処理を追加する。

C# コンピュータ
C#

UserControlを継承しカスタマイズすることでオリジナルのコントロールを作成することが出来ます。
そのコントロールの用途に合わせた固有のイベントを作成することが出来れば、発生したイベントに連動した処理を実行することが出来ます。

namespace UserControlEventSample;

public class OriginalControlEventArgs : EventArgs
{
        public string MessageString {get; set;} = "";
}
public class OriginalControl : UserControl
{
    public event EventHandler ButtonClick;
    public OriginalControl()
    {
        this.ButtonClick += (s, e) =>
        {
            // 何もしない。
        };

        var button = new Button { Text = "押す", Size = new Size(200, 100), };
        button.Click += (s, e) =>
        {
            //MessageBox.Show("ボタンが押された。", "メッセージ");
            ButtonClick?.Invoke(this
            , new OriginalControlEventArgs{MessageString="ボタンが押された"});
        };
        Controls.Add(button);
    }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var oc = new OriginalControl{ Dock = DockStyle.Fill, };
        oc.ButtonClick += (s, e) =>
        {
            MessageBox.Show(((OriginalControlEventArgs)e).MessageString, "メッセージ");
        };

        Controls.Add(oc);
    }
}


UserControl(OriginalControl)上のButtonコントロールをClickしたイベントがButtonClickイベントを介してForm1で捕捉しています。

個人的にイベント処理を扱うことは無いと思っていたのですが、UserControlを作ってみて親コントロールにイベントを伝える必要が出てきて、イベント処理の使い道に気が付いた次第でございます。

コメント