关闭C#Forms Application

我有2个表单…当我启动应用程序时…并使用标题栏中的关闭“X”整个应用程序关闭…现在当我从第一个表单中选择一个选项时,我的情况下它是一个按钮“添加“作为它的电话簿应用程序..它转到第二种forms,因为我使用了firstform.hide()和2ndform.show()…现在,当我从标题栏执行”X“时,它并没有完全关闭,因为1stform没有关闭….如何在整个应用程序关闭的任何阶段以这种方式对其进行编程

您的第一个表单被设置为启动表单。 这意味着无论何时关闭,您的整个应用程序都将关闭。 相反,您的应用程序在关闭之前不会关闭。 因此,当您隐藏启动表单并显示第二个表单时,关闭第二个表单的用户不会触发您的应用程序关闭,因为他们只关闭了一个辅助的非modal dialog。

我建议您更改设计,以便启动表单也是应用程序的主要forms。 尝试解决实际上有用的内置function是没有意义的。 您希望应用程序在主窗体关闭时退出,无论打开其他子窗体。

但是,在您的情况下,快速而肮脏的解决方案是调用Application.Exit 。 这将关闭所有当前打开的表单并立即退出您的应用程序。 正如我上面所说的那样,我不太推荐这种方法,因为必须从每个表单的FormClosed事件处理程序调用Application.Exit ,这表明您的设计中存在严重错误。

如果单个启动表格范例不适合您,您应该考虑自己动手并在Program.cs源文件中自定义Main方法。 请参阅此相关问题的答案,以获取有关如何对您有用的一些想法。

你可以做的是使用Form的FormClosing事件,并添加以下代码:

 Application.Exit(); 

这将停止整个应用程序,并关闭所有窗口。 但是,如果后台线程正在运行,则进程本身将继续存在。 在这种情况下,您可以使用:

 Environment.Exit(); 

在每个表单的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); 

当用户添加电话号码后,您肯定不想关闭整个应用程序吗? 您只需要确保主窗口再次可见。 写这样:

  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(); }