私は、Windowsフォームから派生した別のクラスを含むペインを持つWindowsフォームを持っています。これは、ペイン内のコントロールとして含まれています。それ自体に2つのボタンが含まれています。
子コントロールのイベントを親ウィンドウにすべて渡したいのですが。たとえば、ペインの子ウィンドウにはCancel
ボタンがあり、それを閉じることになっています。親コントロール、つまりメインウィンドウも閉じたいのですが、子コントロールのボタンクリックイベントをインターセプトするにはどうすればよいですか?
子コントロールを変更できますが、適切な方法でこれを実現する方法が他にない場合にのみ、回避したいと思います。
子から直接親フォームを操作できますが、子コントロールによっていくつかのイベントを発生させ、親フォームでイベントをサブスクライブすることをお勧めします。
子供からイベントを上げる:
public event EventHandler CloseButtonClicked;
protected virtual void OnCloseButtonClicked(EventArgs e)
{
var handler = CloseButtonClicked;
if (handler != null)
handler(this, e);
}
private void CloseButton_Click(object sender, EventArgs e)
{
//While you can call `this.ParentForm.Close()` it's better to raise an event
OnCloseButtonClicked(e);
}
親でイベントをサブスクライブして使用:
//Subscribe for event using designer or in form load
this.userControl11.CloseButtonClicked += userControl11_CloseButtonClicked;
//Close the form when you received the notification
private void userControl11_CloseButtonClicked(object sender, EventArgs e)
{
this.Close();
}
イベントの詳細については、以下をご覧ください。