在MDI容器中打开另一个表单

时间:2015-06-27 09:45:42

标签: c# winforms mdi

请参考下图:

http://i.imgur.com/mMS2wDk.jpg

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

3 个答案:

答案 0 :(得分:2)

您的主表单未显示的原因是,一旦您关闭登录表单,您的应用程序的消息泵将关闭,这将导致整个应用程序退出。 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();
    }
}

答案 1 :(得分:-1)

如果您开发WPF表单,则可以使用' http://wpfmdi.codeplex.com/'。或者在Win Form中,您可以使用您想要的表单

答案 2 :(得分:-1)

试试这个

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