我制作了一个C#Windows窗体应用程序,要求用户使用名为Form1
的表单进行登录,如下所示:
// This code is called from Form1
Form2 f = new Form2();
f.Show();
// Then Form1 does some finalization logic and closes itself
用户登录后,应关闭登录表单,并打开主应用程序窗口Form2
。但我遇到的问题是,如果我从Form1调用Form2,Form1将成为Form2的所有者,因此关闭Form1将关闭两个表单并结束应用程序。
我如何调用Form2使其独立于Form1?
答案 0 :(得分:3)
问题不是所有者,而是Windows消息循环与Form1绑定。当Form1关闭时,应用程序也关闭。查看Main
方法:
Application.Run(new Form1());
最简单的解决方案是将您的登录表单(假设它是登录表单)显示为模式对话框,然后在Form2上开始Windows消息循环:
static void Main()
{
var form1 = new Form1();
form1.ShowDialog();
if (form1.LoginSuccessful)
{
Application.Run(new Form2());
}
}
编辑:
只是做了一些谷歌搜索,看起来像另一种选择是自定义ApplicationContext
。从来没有用过这些:
http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext.aspx