繁体   English   中英

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

[英]Opening another form in an MDI container

请参考下图:

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

我正在寻找从一种形式打开另一种形式的最佳方法。 打开菜单表单后,我要关闭登录表单。 我曾尝试这样做,但是当我尝试将其称为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();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM