没有所有者打开新表格?

时间:2012-02-26 04:39:35

标签: c# winforms window

我制作了一个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?

1 个答案:

答案 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