在 MDI 容器中打开另一个窗体

Opening another form in an MDI container

请参考下图:

我正在寻找从一个表单打开另一个表单的最佳方式。打开菜单表单后,我想关闭登录表单。我曾尝试这样做,但是当我尝试将其作为 MDI 容器的子项调用时,我迷路了。

您的主窗体未显示的原因是一旦您关闭登录窗体,您的应用程序的消息泵就会关闭,从而导致整个应用程序退出。 Windows 消息循环与登录表单相关联,因为这是您在项目属性中设置为启动表单的表单。查看您的 "Program.cs" 文件,您会看到负责的代码:Application.Run(new LoginForm())。在 MSDN 上查看该方法的文档,其中对此进行了更详细的解释。

最好的解决方案是将代码从您的登录表单移到 "Program.cs" 文件中。当您的程序首次启动时,您将创建登录表单并将其显示为模态对话框(它在单独的消息循环上运行并阻止其余代码的执行,直到它关闭)。当登录对话框关闭时,您将检查其 DialogResult 属性 以查看登录是否成功。如果是,您可以使用 Application.Run 启动主窗体(从而创建主消息循环);否则,您可以在不显示任何表格的情况下退出应用程序。像这样:

static void Main()
{
    LoginForm fLogin = new LoginForm();
    if (fLogin.ShowDialog() == DialogResult.OK)
    {
        Application.Run(new MainForm());
    }
    else
    {
        Application.Exit();
    }
}

如果开发WPF窗体,可以使用'http://wpfmdi.codeplex.com/'。或者在 Win Form 中你可以玩你想要的形式

试试这个

    //global form
    LoginForm login = new LoginForm();
    public void menuOpen()
    {
       if(login.Visible)
          login.Close();
    }