Winform Forms关闭并打开一个新表单
1. frmHome frm = new frmHome(); frm.Show(); this.Close();
我正在从LoginForm
打开HomeForm
。 在LoginForm
的form_closed
事件中,我调用Application.Exit()
。 这允许您通过单击X
按钮打开LoginForm
并退出应用程序。
问题是当我从LoginForm
移动到HomeForm
并调用this.Close()
, LoginForm
的form_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()
。
编辑:
以上是行不通的,因为LoginForm
是Application.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();
实现这一目标的一种方法:
- 在启动时打开主窗体。
- 把它藏起来。 (实际上可选,但如果你真的不能显示多个表格,则不适合你。)
- 使用ShowDialog()打开您的登录表单;
- 如果登录成功,则显示您的主表单。 如果没有,请关闭主表单/应用程序。
为什么不停止在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代码……但它应该很容易理解