将子控件的click事件传递给父控件

时间:2016-03-21 10:11:19

标签: c# .net winforms user-controls controls

我有一个Windows窗体,有一个窗格,其中包含另一个派生自Windows窗体的类。它包含在窗格中作为控件。它本身包含两个按钮。

我希望子控件的事件一直传递到父窗口。例如,窗格中的子窗口有一个Cancel按钮,应该关闭它。我喜欢父控件,也就是关闭主窗口,但是如何拦截子控件的按钮点击事件?

我可以修改子控件,但只有在没有其他方法以正确的方式实现这一点的情况下,我才愿意避免它。

1 个答案:

答案 0 :(得分:15)

虽然你可以直接从孩子那里与父母表格互动,但最好通过子女控制来筹集一些事件并订阅父母形式的事件。

从儿童提出事件:

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);
}

在Parent中订阅和使用事件:

//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();
}