我的程序中有很多实例,在main form1中,我调用另一个form2,并在使用FormCloseEventHandler关闭form2时运行一个事件。这会更新form1上的一些数据。
但是,现在我需要form1从另一个在程序的另一部分中启动的另一个form3运行一个formclose事件处理程序,而不是form1。
这是如何实现的?我想在form1上每隔10秒运行一次计时器,用于form3 formclose事件设置的公共标志,但这不是最优雅的选择。
答案 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
中的代码解压缩到一个公共帮助程序类中,以便您可以从不同的位置调用它。