当主窗体关闭时,C#应用程序退出

12

我正在编写一个多窗体应用程序,想要在不关闭整个应用程序的情况下关闭Form1。
目前我使用 this.Hide 来隐藏该窗体。是否有一种方法可以设置使得可以关闭任何窗体,或者只能在所有窗体关闭时应用程序才能退出?

我记得曾经在某个地方看到过这样的东西,但那可能不是在Visual Studio和C#中。


请查看 Program.cs 文件。第三行使用的窗体是您的“根”窗体,当此窗体关闭时,程序将关闭。因为在运行窗体后程序没有其他任务可执行,所以它会关闭。您希望程序在关闭窗体后执行什么任务? - gunr2171
可能是重复的问题 https://dev59.com/5VbTa4cB1Zd3GeqP7Al6?rq=1 - jrbeverly
4个回答

22

在你的 Program.cs 文件中,你会有一行像这样的代码 Application.Run(new Form1())。请将其替换为:

var main_form = new Form1();
main_form.Show();
Application.Run();

你还需要在想要关闭应用程序的位置显式地调用 Application.Exit() 方法来关闭应用程序。


3
谢谢!它有效了,但我必须这样做: var main_form = new Form1();
main_form.Show();
Application.Run(); 否则它只是启动了而没有显示表单。再次感谢!
- WolfyD
1
是的,我忘了。已经添加到答案中了。 - dmay

7

有一个策略是像以下这样做:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    if (Application.OpenForms.Count == 0)
        Application.Exit();
    }
}

如果您在所有表单上都使用这个代码,当最后一个表单关闭时,应用程序将退出。

1
第5行多了一个 } - GGG

1
一款多窗口应用程序应该有明确的退出选项(可以通过菜单栏、工具栏等实现),因为当最后一个窗口关闭时,你无法知道用户是否想要关闭程序(我假设用户可能会转到“文件/打开”并打开新窗口)。
如果应用程序自动执行了用户没有请求的操作,会引起挫败感/困惑,并浪费重新打开应用程序的时间。甚至用户可能会认为应用程序崩溃了,因为他没有关闭它。

谢谢,这是一些好的知识。我通常会确保我的应用程序用户友好,不会限制他们调整窗口大小等操作,但这是一个线性应用程序,它有一个特定的流程。当用户点击下一个按钮时,我希望它能够转到下一个表单并关闭上一个表单。我可以将其隐藏,但我不想浪费CPU时间在用户再也看不到的不可见表单上。 - WolfyD
用户还将有机会在每个表单上退出应用程序。 - WolfyD
@WolfyD 如果只有一个流程,为什么不使用典型的向导界面,包括后退、下一步和取消按钮呢?当达到所需状态时,下一步按钮将变为完成。 - Mauricio Gracia Gutierrez

0

根据您的评论,这是一种单流程应用程序

我建议您在单个表单上实现典型的向导界面,并使用后退、下一步、取消按钮。

当达到所需状态时,例如收集足够的信息,下一步按钮将更改为完成按钮。

任何时候用户按下取消/完成按钮,窗口都会关闭

如果您仍然想要多个表单,您仍然可以拥有它,在此过程中,您可以同时拥有多个流程,并只完成或取消您想要的流程。


是的,我考虑过这个问题,但由于每个表单需要不同的控件和信息,设置起来会相当繁琐。但是我已经想出一种方法,在用户进入下一个表单时应用程序仍然可以继续工作,当用户想要关闭表单时,无论是使用[X]、任务管理器还是退出按钮,都会关闭整个应用程序,因此不会产生混淆。 - WolfyD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接