我制作了一个C#Windows Forms应用程序,该应用程序要求用户使用名为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?

最佳答案

问题不是所有者,而是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

关于c# - 在没有所有者的情况下打开新表格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9450586/

10-13 04:17