winforms 将子控件的单击事件传递给父控件

gkn4icbw  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(210)

我有一个Windows窗体,它有一个窗格,窗格中包含另一个类,该类派生自Windows窗体。该类作为控件包含在窗格中。它本身包含两个按钮。
我希望子控件的事件能够一直传递到父窗口。例如,窗格中的子窗口有一个Cancel按钮,该按钮应该关闭它。我希望父控件(即主窗口)也关闭,但如何拦截子控件的按钮单击事件?
我可以修改子控件,但只有在没有其他适当的方法来实现这一点的情况下,我才希望避免这样做。

pkwftd7m

pkwftd7m1#

虽然您可以直接从子窗体(如this.ParentForm.Close())与父窗体交互,但最好通过子控件引发一些事件并订阅父窗体中的事件。

从子项引发事件:

public event EventHandler CloseButtonClicked;
protected virtual void OnCloseButtonClicked(EventArgs e)
{
    CloseButtonClicked?.Invoke(this, e);
}
private void CloseButton_Click(object sender, EventArgs e)
{
    OnCloseButtonClicked(e);
}

**注意:**要引发XXXX事件,调用XXXX事件委托就足够了;创建protected virtual OnXXXX的原因只是为了遵循该模式,让派生程序覆盖该方法,并在引发事件之前/之后定制行为。
订阅和使用父级中的事件:

//Subscribe for event using designer or in constructor or 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();
}

要了解有关事件的详细信息,请参阅:

相关问题