我有2个表单...当我启动应用程序时...并使用标题栏中的关闭“X”整个应用程序关闭...现在当我从第一个表单中选择一个选项时,我的情况是一个按钮“ADD”作为它的电话簿应用程序..它转到第二个表单,因为我使用了firstform.hide()和2ndform.show()...现在当我从标题栏执行“X”时它不会关闭完全没有关闭1stform ....如何在整个应用程序关闭的任何阶段以这样的方式编程
答案 0 :(得分:11)
您的第一个表单被设置为启动表单。这意味着无论何时关闭,您的整个应用程序都将关闭。相反,您的应用程序不会关闭直到关闭。因此,当您隐藏启动表单并显示第二个表单时,关闭第二个表单的用户不会触发您的应用程序关闭,因为他们只关闭了一个辅助的非模态对话框。
我建议您更改设计,以便启动表单也是应用程序的主形式。尝试解决实际上有用的内置功能是没有意义的。您希望应用程序在主窗体关闭时退出,无论打开其他子窗体。
但在您的情况下,快速而肮脏的解决方案是拨打 Application.Exit
。这将关闭当前打开的表单的所有并立即退出您的应用程序。正如我上面所说,我不太推荐这种方法,因为必须从每个表单的FormClosed
事件处理程序中调用Application.Exit
,这表明您的设计中存在严重错误。
如果单个启动表单范例不适合您,您应该考虑自己动手并自定义Main
源文件中的Program.cs
方法。请参阅this related question给出的答案,了解可能对您有用的一些想法。
答案 1 :(得分:5)
您可以使用表单的FormClosing
事件,并添加以下代码:
Application.Exit();
这将停止整个应用程序,并关闭所有窗口。但是,如果后台线程正在运行,则进程本身将继续存在。在这种情况下,您可以使用:
Environment.Exit();
答案 2 :(得分:2)
在每个表单的Closing事件
上添加Application.Exit 像这样:首先创建一个结束事件处理程序
private void Form_ClosingEventhandler()(object sender, CancelEventArgs e)
{
//Perform any processing if required like saving user settings or cleaning resources
Application.Exit();
}
然后将此事件绑定到您创建的任何表单。
//Where you create new form and show it.
Form1 frm= new Form1();
//set other properties
frm.Closing += new EventHandler(Form_ClosingEventhandler);
Form2 frm2= new Form2();
//set other properties
frm2.Closing += new EventHandler(Form_ClosingEventhandler);
答案 3 :(得分:1)
当然,您不希望在用户添加电话号码后关闭整个应用程序?您只需要确保主窗口再次可见。写得像这样:
private void AddButton_Click(object sender, EventArgs e) {
var frm = new AddPhoneNumber();
frm.StartPosition = FormStartPosition.Manual;
frm.Location = this.Location;
frm.Size = this.Size; // optional
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}