Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当其中一个窗体关闭时,如何关闭内存中加载的两个窗体?_C# - Fatal编程技术网

C# 当其中一个窗体关闭时,如何关闭内存中加载的两个窗体?

C# 当其中一个窗体关闭时,如何关闭内存中加载的两个窗体?,c#,C#,当我运行我的应用程序时,两个不同的表单同时被加载,但其中一个被显示。现在我想如果这些表单中的一个被关闭,其他隐藏的表单也应该被关闭。有什么建议吗。 这些表单之间没有父子关系。我将假设这是一个引用两个表单的应用程序。如果不是这样,请告诉我 基于此假设,伪代码中显示了以下内容: MyApplication { Form form1; Form form2; } 如果尚未关闭另一个窗体,则该窗体的每个关闭事件都可以关闭该窗体: Form1_Close() { if(form2

当我运行我的应用程序时,两个不同的表单同时被加载,但其中一个被显示。现在我想如果这些表单中的一个被关闭,其他隐藏的表单也应该被关闭。有什么建议吗。
这些表单之间没有父子关系。

我将假设这是一个引用两个表单的应用程序。如果不是这样,请告诉我

基于此假设,伪代码中显示了以下内容:

MyApplication
{
    Form form1;
    Form form2;
}
如果尚未关闭另一个窗体,则该窗体的每个关闭事件都可以关闭该窗体:

Form1_Close()
{
    if(form2 != null)
    {
        form2.Close();
        form2 = null;
    }
}
然后:

Form2_Close()
{
    if(form1 != null)
    {
        form1.Close();
        form1 = null;
    }
}

这是否满足您的要求?

假设这两个表单都在同一个过程中,您可以让第二个隐藏表单处理可见表单的FormClosed事件,并在激活可见表单的FormClosed事件时自行关闭它

  public partial class Form1 : Form
  {
    private void Form1_Load(object sender, EventArgs e)
    {
      // The following does not need to happen in the Load of this form

      // Create hidden Form
      Form2 frm = new Form2();

      // Attach hidden form to this form
      frm.AttachTo(this);
    }
  }

  public class Form2 : Form
  {
    public void AttachTo(Form frmMain)
    {      
      frmMain.FormClosed += new FormClosedEventHandler(frmMain_FormClosed);
    }

    void  frmMain_FormClosed(object sender, FormClosedEventArgs e)
    {
      this.Close();
    }
  }

它们都是从同一进程启动的,还是从两个不同的程序启动的?@keyboardP,来自同一应用程序的两个不同表单被加载并可互换使用。