请参考下图:
我正在寻找从一种形式打开另一种形式的最佳方式。菜单表单打开后,我想关闭登录表单。我试图这样做,但当我尝试将其称为MDI容器的子项时,我迷路了。
答案 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();
}