窗体未从父窗体打开时的事件处理程序

本文关键字:窗体 事件处理 程序 | 更新日期: 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");
}

LoadForm3事件中,您可以这样做:

var f1 = Application.OpenForms.OfType<Form1>().FirstOrDefault();
if(f1 !=null)
    this.FormClosed += f1.Form3_FormClosed;

一般不要让表单显示表单,因为这样很难跟踪应用程序中打开了哪些表单以及它们的状态。

您需要实现一个设计模式,并引入一些类来处理表单之间的工作流。然后这个类决定在什么场合显示哪个表单,它可以在表单之间进行通信,例如通过使用自定义事件。

从事件处理程序执行长代码是典型的反模式。将Form3.FormClose中的代码提取到一个公共的助手类中,以便您可以从不同的地方调用它。