gpt4 book ai didi

c# - 将子控件的点击事件传递给父控件

转载 作者:可可西里 更新时间:2023-11-01 08:38:04 38 4
gpt4 key购买 nike

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

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

我可以修改子控件,但前提是没有其他方法以正确的方式实现此目的,我宁愿避免它。

最佳答案

虽然您可以直接从子表单与父表单交互,但最好通过子控件引发一些事件并订阅父表单中的事件。

从 child 引发事件:

public event EventHandler CloseButtonClicked;
protected virtual void OnCloseButtonClicked(EventArgs e)
{
CloseButtonClicked.Invoke(this, e);
}
private void CloseButton_Click(object sender, EventArgs e)
{
//While you can call `this.ParentForm.Close()` but it's better to raise the event
//Then handle the event in the form and call this.Close()

OnCloseButtonClicked(e);
}

注意:要引发 XXXX 事件,调用 XXXX 事件委托(delegate)就足够了;创建 protected virtual OnXXXX 的原因只是为了遵循让派生者覆盖方法并在引发事件之前/之后自定义行为的模式。

在Parent中订阅和使用事件:

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

要了解有关事件的更多信息,请查看:

关于c# - 将子控件的点击事件传递给父控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36128148/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com