在我的main方法中,我像往常一样启动主窗体:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
在主要表单加载中我有以下内容,它将要求用户登录并填充。
using (loginForm)
{
DialogResult r = loginForm.ShowDialog();
switch (r)
{
case DialogResult.OK:
break;
default:
Application.Exit();
return;
}
}
我的问题是主要表单出现在后台,我想要它,好吧......不是。直到登录确定。我该怎么做? Application.Run()方法说它会自动显示表单。是否有另一种方法可以启动主窗体而不显示它?或者我必须在主窗体的构造函数中将visible设置为false,然后在登录完成后返回true,或类似的东西?做这样的事情的推荐方法是什么?登录表单意图就像一个组合的启动画面和登录。首先它加载并设置一些不同的东西,然后它告诉用户登录。
答案 0 :(得分:11)
而不是:
Application.Run(new MainForm());
尝试:
LoginDialog // the class that handles login UI
login = new LoginDialog ();
if (login.ShowDialog () == DialogResult.OK)
{
// check credentials
// if credentials OK
Application.Run(new MainForm());
}
ShowDialog
方法是一个阻塞调用,程序将暂停,直到对话框因用户输入而关闭 - 按“确定”按钮或“取消”按钮。
答案 1 :(得分:2)
最简单的方法是使用Application.Run启动登录表单。当登录正常并且已设置其他内容时,只显示“主要”表单。
Application.Run(new LoginForm());
并在确定按钮的登录表单中:
this.Visible = false;
this.ShowInTaskbar = false;
MainForm mainForm = new MainForm();
mainForm.Show();
答案 2 :(得分:0)
我喜欢Skizz的回答,但如果这对你没有帮助,你也可以在加载MainForm的情况下做到这一点。只需将代码放在那里即可显示登录对话框。
答案 3 :(得分:-3)
有一点sleep
?还是OnLoadComplete?