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

时间:2016-07-24 19:22:33

标签: c# .net winforms

我的项目中有两个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打开并在一秒钟内关闭两个表单,程序停止调试。

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

3 个答案:

答案 0 :(得分:0)

你可以这样做

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;
  }

答案 1 :(得分:0)

您的问题是您在Form1中托管Form2。

看起来,您的应用程序从Form1开始,然后在其中加载Form2, 现在你关闭Form1并且期待Form2在你杀死它的主机时保持活力

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

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

答案 2 :(得分:0)

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

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

第三个选项是在MainForm关闭时调用Application.Exit()。 (在How to properly exit a C# application?

了解更多信息