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