在 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();
}
请参考下图:
我正在寻找从一个表单打开另一个表单的最佳方式。打开菜单表单后,我想关闭登录表单。我曾尝试这样做,但是当我尝试将其作为 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();
}