关闭C#Forms Application

时间:2011-02-04 12:41:51

标签: c# .net winforms forms

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

4 个答案:

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