【问题标题】:Opening a new form without owner?打开没有所有者的新表单?
【发布时间】:2012-03-16 01:46:36
【问题描述】:

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

【问题讨论】:

  • form1 是如何显示的?是通过Application.Run吗?
  • im 使用 f.Show() 如上图,即是 Visual Studio 中的确切代码
  • 我的意思是form1,而不是form2form1 是如何显示的?
  • @Damien_The_Unbeliever 我假设它是默认的 Main 生成代码 - Application.Run
  • 哦抱歉,是的,它是 Application.Run(...);

标签: c# winforms window


【解决方案1】:

问题不在于所有者,而在于 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());
    }
}

编辑: 刚刚做了一些谷歌搜索,看起来另一种选择是自定义ApplicationContexts。不过,我自己从未使用过这些:

http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext.aspx

【讨论】:

  • 我本来打算写一个基于ApplicationContext 的示例,但现在不能打扰...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2011-03-20
  • 2014-01-06
相关资源
最近更新 更多