我有2个表单(main
和login
)。我用这段代码打开登录表单:
toolStripProgressBar1.Value = 50;
toolStripStatusLabel_dynamic.Text = "Proberen toegang te verkrijgen...";
Login login = new Login();
login.ShowDialog();
do_login();
我在登录表单的顶部有一个工具条菜单,其中包含eventhandler
:
private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) {
Application.Exit();
}
但是在两个表单都关闭后,程序继续工作(它调用函数do_login
。)但是变量没有设置,表单也没了,所以do_login
不会工作......
那么当我点击工具条时,如何让程序的整个执行停止?
答案 0 :(得分:4)
也许查看ShowDialog
的结果?
using(var login = new Login()) {
if(login.ShowDialog() == DialogResult.OK) {
do_login();
}
}
(using
是因为你负责调用Dispose()
如果您使用ShowDialog()
,但不 Show()
)
答案 1 :(得分:4)
你将不得不解决它,因为Application.Exit()
的定义如下。
通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。
所以它说的是,一旦所有消息都被完全处理,它就会退出,但由于你有一条消息需要在对话框关闭后处理,所以必须先完成。您正在正常退出,但是您必须检查null
并在null
方法中返回do_Login()
。
答案 2 :(得分:3)
结合Marc的回答,将Application.Exit
更改为Environment.Exit(0)
。
private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) {
Environment.Exit(0);
}
答案 3 :(得分:2)
我不认为调用Application.Exit();是退出的好方法。例如,它可能不允许执行任何其他代码来执行清理应用程序关闭。
相反,您应该从Login返回DialogResult以指示需要关闭。然后主要表格应检查并优雅地关闭。
答案 4 :(得分:1)
试试这个。 Environment.Exit(0);