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

时间:2015-09-30 09:20:02

标签: c# .net forms winforms

我的程序中有很多实例,在main form1中,我调用另一个form2,并在使用FormCloseEventHandler关闭form2时运行一个事件。这会更新form1上的一些数据。

但是,现在我需要form1从另一个在程序的另一部分中启动的另一个form3运行一个formclose事件处理程序,而不是form1。

这是如何实现的?我想在form1上每隔10秒运行一次计时器,用于form3 formclose事件设置的公共标志,但这不是最优雅的选择。

3 个答案:

答案 0 :(得分:1)

虽然我不知道你想要做什么以及为什么要使用这种模式,但这里有一个满足你需要的解决方案:

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;

答案 1 :(得分:0)

您通常不会让表单显示表单,因为很难跟踪您的应用程序中打开了哪些表单以及它们的状态。

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

答案 2 :(得分:-1)

从事件处理程序执行长代码是典型的anti-pattern。 将Form3.FormClose中的代码解压缩到一个公共帮助程序类中,以便您可以从不同的位置调用它。