Winform Forms关闭并打开一个新表单

1. frmHome frm = new frmHome(); frm.Show(); this.Close(); 

我正在从LoginForm打开HomeForm 。 在LoginFormform_closed事件中,我调用Application.Exit() 。 这允许您通过单击X按钮打开LoginForm并退出应用程序。

问题是当我从LoginForm移动到HomeForm并调用this.Close()LoginFormform_closed事件触发器并且应用程序被关闭。

我被允许一次只显示一个表格。

你可以在LoginForm使用boolean(全局变量)作为退出标志

将其初始化为:

 exit = true;//in constructor 

在关闭之前将其设置为false:

 frmHome frm = new frmHome(); frm.Show(); exit = false; this.Close(); 

并在form_closed

 if(exit) Application.Exit(); 

如果用户使用'X'按钮关闭表单,则exit将具有值true ,并且将调用Application.Exit()

编辑:

以上是行不通的,因为LoginFormApplication.Run(loginForm)使用的主要表单。

2意见建议:

exit标志:

更换

 Application.Run(new LoginForm()) 

通过

 LoginForm loginFrm = new LoginForm(); loginFrm.Show(); Application.Run(); 

没有exit标志:

在您当前的代码中替换:

 frmHome frm = new frmHome(); frm.Show(); this.Close(); 

通过

 frmHome frm = new frmHome(); this.Visible = false; frm.ShowDialog(); this.Close(); 

在program.cs中:

 void Main() { frmLogin fl = new frmLogin(); if (fl.ShowModal() == DialogResult.Ok) { frmHome fh = new frmHome(); fh.Show(); } } 

你可以强制表单隐藏,而不是关闭。 而不是捕获form_closed事件,捕获form_closing事件。 看起来像这样。

 private void LoginFrm_Closing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); frmHome frm = new frmHome(); frm.Show(); } 

这将保持开放,但只有一个可见。 frmHome中的某个地方,可能是一个用于保存LoginFrm的公共变量,因此您可以使用Hide()在两者之间切换; 和Show(); (以及您可能希望添加的任何其他表格)

编辑:语法。

所有你需要做的就是它关闭2个表格没有问题。 Form1 fin = new Form1(); fin.Close(); this.Visible = false; Form2 win = new Form2(); win.Visible = true;

试着它可以帮到你

 frmHome frm = new frmHome(); this.hide() frm.ShowDialog(); this.Close(); 

实现这一目标的一种方法:

  1. 在启动时打开主窗体。
  2. 把它藏起来。 (实际上可选,但如果你真的不能显示多个表格,则不适合你。)
  3. 使用ShowDialog()打开您的登录表单;
  4. 如果登录成功,则显示您的主表单。 如果没有,请关闭主表单/应用程序。

为什么不停止在form_closed事件中调用application.exit?

我不确定你是否真的需要它,如果你这样做,你可以从屏幕上删除x图标并给它们一个关闭按钮。

或者,事件args中有一个CloseReason,它会告诉您是否是关闭表单或代码的用户。

我不太清楚我是否理解这一点,如果你想循环一个特定的表单顺序,也许你可以这样做:(伪代码)

 Dim formsList as New List(Of form) formsList.add(Form1) formsList.add(Form2) formsList.add(Form3) ' etc etc etc ' For Each f as Form in formsList f.ShowDialog() ' you could have a condition here which breaks the for loop perhaps ' Next Me.close ' close the app ' 

你可以在For循环中添加一个条件,它会打破for循环以提前结束…

注意:抱歉vb.net代码……但它应该很容易理解