我有一个Windows窗体,有一个窗格,其中包含另一个派生自Windows窗体的类。它包含在窗格中作为控件。它本身包含两个按钮。
我希望子控件的事件一直传递到父窗口。例如,窗格中的子窗口有一个Cancel
按钮,应该关闭它。我喜欢父控件,也就是关闭主窗口,但是如何拦截子控件的按钮点击事件?
我可以修改子控件,但只有在没有其他方法以正确的方式实现这一点的情况下,我才愿意避免它。
答案 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();
}