1. frmHome frm = new frmHome();
frm.Show();
this.Close();
我正在HomeForm
开启LoginForm
。在LoginForm
的{{1}}活动中,我致电form_closed
。这样您就可以打开Application.Exit()
并点击LoginForm
按钮退出应用程序。
问题是,当我从X
转到LoginForm
并致电HomeForm
时,this.Close()
触发了form_closed
个事件并且应用程序将关闭。< / p>
我被允许一次只显示一个表格。
答案 0 :(得分:12)
您可以在LoginForm
将其初始化为:
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();
答案 1 :(得分:7)
在program.cs中:
void Main() {
frmLogin fl = new frmLogin();
if (fl.ShowModal() == DialogResult.Ok) {
frmHome fh = new frmHome();
fh.Show();
}
}
答案 2 :(得分:1)
你可以强制表单隐藏,而不是关闭。 而不是捕获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(); (以及您可能希望添加的任何其他表格)
编辑:语法。
答案 3 :(得分:1)
您需要做的就是关闭2个表单而不会出现问题。 Form1 fin = new Form1(); fin.Close(); this.Visible = false; Form2 win = new Form2(); win.Visible = true;
答案 4 :(得分:1)
尝试它可以帮助你
frmHome frm = new frmHome();
this.hide()
frm.ShowDialog();
this.Close();
答案 5 :(得分:0)
实现这一目标的一种方法:
答案 6 :(得分:0)
为什么不停止在form_closed事件中调用application.exit?
我不确定你是否真的需要它,如果你这样做,你可以从屏幕上删除x图标并给它们一个关闭按钮。
或者,事件args中有一个CloseReason,它会告诉您是否是关闭表单或代码的用户。
答案 7 :(得分:0)
我不太确定我是否理解这一点,如果您想循环使用特定的表单顺序,也许你可以做这样的事情:(伪代码)
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代码......但是它应该很容易理解