C# 如何在打开另一个Winform时关闭一个Winform

C# 如何在打开另一个Winform时关闭一个Winform,c#,.net,winforms,C#,.net,Winforms,我的项目中有两个Win表单,一个是Login表单,另一个是Main表单。我在Login表单中有一个按钮,单击该按钮应打开Main表单并关闭当前(登录)表单 我试过这种方法 private void button1_Click(object sender, EventArgs e) { Mainform frm = new Mainform(); frm.Show(); this.Hide(); } 但它只隐藏了当前的形式。

我的项目中有两个Win表单,一个是
Login
表单,另一个是
Main
表单。我在
Login
表单中有一个按钮,单击该按钮应打开
Main
表单并关闭当前(登录)表单

我试过这种方法

private void button1_Click(object sender, EventArgs e)
{
    Mainform frm = new Mainform();
                frm.Show();
                this.Hide();
}
但它只隐藏了当前的形式。因此,即使在关闭主窗体之后,我也必须通过按Shift+F5手动停止调试。

然后我尝试了以下代码

private void button1_Click(object sender, EventArgs e)
{
    Mainform frm = new Mainform();
                frm.Show();
                this.Close();
}
但是现在,当我单击按钮时,
Mainform
打开,在一秒钟内,两个表单都关闭了,程序停止调试


如何从
Login
表单正确打开
Mainform
,而不必手动停止调试?

您可以通过这种方式实现

private void button1_Click(object sender, EventArgs e)
  {
     Mainform frm = new Mainform();
     frm.Show();

     this.ShowInTaskbar = false;
     this.WindowState = FormWindowState.Minimized;
  }
在另一个地方,您可以再次显示登录表单

private void button1_Click(object sender, EventArgs e)
  {
     this.ShowInTaskbar = true;
     this.WindowState = FormWindowState.Normal;
  }

您的问题是,您将Form2托管在Form1中

看起来,应用程序从Form1开始,然后在其中加载Form2, 现在,您关闭Form1并希望Form2在您刚刚杀死它的主机时仍然活着

更好的方法是使用不同的表单或首选的静态类初始化应用程序,这些表单将在应用程序的生命周期中“持续”


这正是为什么当您启动一个新的Windows窗体项目时,会在您的解决方案中添加一个名为Program.cs的类。

正如@polisha989所说,如果您希望在MainForm关闭时终止应用程序,或者最终在那里重新打开Loginform,您可以在Program.cs中托管MainForm

第二步是将LoginForm的引用传递给MainForm,并在MainForm关闭时重新打开LoginForm


第三个选项是在MainForm关闭时调用
Application.Exit()
。(在此处查找更多信息

您使用的是哪种表单?它绝对不是ASP.NET.WPF或Winforms?Visual Studio中的Windows表单刚刚试用过它。当我关闭主表单时,登录表单再次出现,关闭登录表单后,我必须手动停止调试。显示更多详细信息代码,因为没有理由让登录表单出现错误。)在mainform退出方法中,您可以使用
Environment。退出(0)
则不必手动停止调试huse
Environment。退出(0)
在mainform退出方法中,则一切都将关闭,您不必手动停止调试伟大、愉快的编码:)