C# 如何关闭主窗体而不关闭其他窗体?

C# 如何关闭主窗体而不关闭其他窗体?,c#,forms,C#,Forms,所以,我正在写一本《刽子手》,在主窗体上,你必须选择是玩单人游戏还是多人游戏。当我选择所需的窗体时,这个主窗体应该关闭(我使用this.close())并触发另一个窗体,但是整个程序会关闭 private void button2_Click(object sender, EventArgs e) { Form f2 = new Form1(); f2.Show(); this.Close(); } 如果在Programs.cs中,我修改代码

所以,我正在写一本《刽子手》,在主窗体上,你必须选择是玩单人游戏还是多人游戏。当我选择所需的窗体时,这个主窗体应该关闭(我使用this.close())并触发另一个窗体,但是整个程序会关闭

private void button2_Click(object sender, EventArgs e)
{
     Form f2 = new Form1();
     f2.Show();
     this.Close();           
}
如果在Programs.cs中,我修改代码如下:

Form f4 = new Form4();
f4.Show();          
Application.Run();
一切进展顺利,但如果我不使用Application.exit()退出程序,它仍将在后台运行


那么,我该如何解决这个问题呢?

您不能关闭父窗体并使子窗体保持活动状态。

使用
this.Hide()
代替
this.Close()

然后在
Form2\u FormClosed
事件中,您可以执行
Application.Exit()
或者您甚至可以再次显示主窗体

或:

Form2 f2 = new Form2();
this.Visible = false;
f2.ShowDialog();
this.Close();

您可以在应用程序之前显示(对话框)您的表单。运行(new MainForm()),因此您不需要关闭MainForm

如果您想要一个基本表单,它几乎只允许用户播放,直到他们关闭另一个表单,然后关闭此表单,请使用以下方法:

private void button2_Click(object sender, EventArgs e)
{
    Form f2 = new Form1();
    this.Hide();
    f2.ShowDialog();
    this.Close();           
}
或者,如果用户选择了诸如不想玩其他游戏或更改难度设置之类的内容,则可以使用更为奇特的方式关闭窗体。您可以这样做:

private void button2_Click(object sender, EventArgs e)
{
    Form f2 = new Form1();
    this.Hide();
    if(f2.ShowDialog() == DialogResult.OK)
    {
        this.Show();
    }
    else
    {
        this.Close();
    }
}

那么这个.Hide()呢?您需要调用另一个表单的
FormClosed
methodHide上的
Application.Exit()
,它基本上是从用户的角度关闭的。您可以在子窗体上显示对话框,因此当它关闭时,您可以确定是关闭程序还是再次显示主窗体。