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を作ってみて親コントロールにイベントを伝える必要が出てきて、イベント処理の使い道に気が付いた次第でございます。
コメント