2010-10-31 19 views
3

比方说,我从推出Program.cs的倍数的WinForms与启动多个winforms后退出应用程序的方法?

Form1 form1 = new Form1(); 
form1.show(); 
Form2 form2 = new Form2(); 
form2.show(); 
Application.Run(); 

如何退出应用程序时,所有形式的被用户关闭?

我当然可以将Application.Exit()放在FormClosed事件中,但我认为它不是很优雅。有其他方法吗?

更新:我的意思是它不是优雅的硬编码每个FormClosed每个我必须添加一个新的表单。那么有没有一种方法可以在全局范围内检查FormClosed事件,这样我就可以在不使用PLUMBING BY HAND的情况下将代码维护在中心事件处理程序中。

在一些像Wordpress这样的框架中,你可以捕捉任何事件的全局对象,我想要的是同样的东西。

+0

如果这是您想要发生的情况,表单关闭时如何退出应用程序又是什么“不雅”? – 2010-10-31 21:10:54

+0

查看上面的更新 – user310291 2010-11-01 04:20:40

+0

从'ApplicationContext'继承 - 请参见[here](http://stackoverflow.com/a/13406508/111794)。 – 2012-11-16 09:50:26

回答

4

在这种情况下,需要Application.Exit()。另一种方法是指定一种形式作为“主窗口”。而当它被关闭,应用程序将终止:

Application.Run(form1); 

.NET Framework还支持“当最后一个窗口关闭”关断模式。请在this thread中查看我的代码以获取所需的代码。

+0

我已经提到Application.Exit是必需的。我的问题是关于如何在全局钩住FormClosed事件,以便每次添加新的表单类时手工操作都没有维护的麻烦。 – user310291 2010-11-01 04:22:15

+0

我读了你的其他线程,并了解到ShutdownMode.AfterAllFormsClose应该解决我的问题,谢谢。 – user310291 2010-11-01 04:27:50

1

使用Application.OpenForms处理所有打开的表单并决定如何处理它们。如果你知道应该保存哪一个 - 提示用户,否则关闭它。等等。

1

您可以维护一个打开的表单列表,并且每次关闭表单时,都会从列表中删除它自己,然后检查列表是否为空。如果列表为空,则结束该应用程序。

相关问题