关闭多个表单

Closing multiple forms

我的申请中有三份表格。 Form1、Form2 和 Form3。

Form1打开Form2,它们都打开了。还行吧。我希望这发生。

Form2 有一个打开 Form3 的按钮。同样,这是期望的行为。

Form3 有两个按钮...一个用于关闭 Form3 并返回到 Form1 和 Form2 处于打开状态。这个我可以。

问题是 Form3 上的第二个按钮...我需要那个按钮来关闭 Form3 和 Form2,这样现在只有 Form1 打开了。

关于如何在不关闭应用程序的情况下一次关闭多个表单的任何想法?

构建 Application.OpenForms 集合中 类型 Form1 的所有表单的列表;然后关闭它们:

    private void btnCloseAllExceptForm1_Click(object sender, EventArgs e)
    {
        List<Form> formsToClose = new List<Form>();
        foreach(Form frm in Application.OpenForms)
        {
            if (!(frm is Form1))
            {
                formsToClose.Add(frm);
            }
        }
        foreach(Form frm in formsToClose)
        {
            frm.Close();
        }
    }

或者,您可以对打开特定 Form3Form2 进行本地引用,并将其传递到 Form3 的构造函数中:

//references the Form2 that opens me (this is Form3)
private Form2 MyForm2Instance;

//you can add this in your existing Form3's constructor, or create a new one
public Form3(Form2 frm2)
{
    InitializeComponent();
    MyForm2Instance = frm2;
}

然后在您的 Form3 按钮中您可以拥有:

private void button1_Click(object sender, EventArgs e)
{
    //this will close only the Form2 that opened this Form3
    //and it will also close this Form3
    MyForm2Instance.Close();
    this.Close();
}

现在您只需更改打开 Form3 的方式,方法是使用 Form2 中的新构造函数:

Form3 frm3 = new Form3(this);
frm3.Show();