窗体未从父窗体打开时的事件处理程序
本文关键字:窗体 事件处理 程序 | 更新日期: 2023-09-27 18:15:20
我在我的程序中有许多实例,在主form1中,我调用另一个form2,并在form2关闭时使用FormCloseEventHandler运行一个事件。这将更新form1的一些数据。
但是,现在我需要form1从程序的另一部分启动的不同form3(而不是form1)运行formclose事件处理程序。
这是如何实现的?我想有一个计时器运行每10秒的form1上的一个公共标志设置的form3 formclose事件,但这不是最优雅的解决方案。
虽然我不知道你到底想做什么,为什么要使用这种模式,但这里有一个满足你需要的解决方案:
在Form1
:
public void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Form 3 Closed");
}
在Load
的Form3
事件中,您可以这样做:
var f1 = Application.OpenForms.OfType<Form1>().FirstOrDefault();
if(f1 !=null)
this.FormClosed += f1.Form3_FormClosed;
一般不要让表单显示表单,因为这样很难跟踪应用程序中打开了哪些表单以及它们的状态。
您需要实现一个设计模式,并引入一些类来处理表单之间的工作流。然后这个类决定在什么场合显示哪个表单,它可以在表单之间进行通信,例如通过使用自定义事件。
从事件处理程序执行长代码是典型的反模式。将Form3.FormClose
中的代码提取到一个公共的助手类中,以便您可以从不同的地方调用它。