如果有三个窗体,我能否显示窗体3并关闭窗体1和窗体2?

3

我有三个表单。当在Form2中点击按钮时,我想显示Form3并关闭Form1、Form2。这是我的代码。当我运行这段代码时,它可以显示Form3但无法关闭Form1

Form1

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.ShowDialog();
    //frm2.Show();
}

表单2

private void button1_Click(object sender, EventArgs e)
{
    Form3 frm3 = new Form3();
    Form1 frm1 = new Form1();
    frm3.Show();

    frm1.Hide();  // It not close Form1
    this.Hide();
    // frm1.Close();
    // this.Close();
}

在你的 program.cs 文件中,我想它正在打开真正的窗体 1,“它不会关闭 form1”,因为你刚刚创建了一个从未打开的 form1 实例。如果 program.cs 正在打开 form1,那么不能关闭它,因为你期望的是错的。 - Sayse
1个回答

6
问题: 您正在创建Form1的新实例,然后尝试关闭/隐藏它。

解决方案: 您需要获取已经在内存中的Form1实例,然后将其隐藏或关闭。

请替换为:

Form1 frm1 = new Form1();
frm1.Hide();  // It not close Form1

使用这个:

Form1 form1 = (Form1) Application.OpenForms["Form1"];
Form3 frm3 = new Form3();
frm3.Show();   
form1.Hide();

2
这样做不会因为form1是父窗体而关闭整个程序吗? - Sayse
@Sayse:请检查我的修改后的答案,现在它会打开Form3并隐藏Form1。 - Sudhakar Tillapudi
好的,但是 OP 应该注意这并没有关闭表单,它仍然会保留任何数据。 - Sayse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接