我有一个运行的简单程序,但在此之前,我会弹出一个登录表单,验证信息是否正确。如果是的话,登录表单就会关闭,主表单就会启动。然而,当我在打开主表单后关闭登录表单时,它会关闭整个应用程序。
我的程序.cs刚刚运行了一个新的frmLogin。这就是我登录时发生的情况。
frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text);
frm.Show();
this.Close();
我怎么能抑制这种情绪呢?感谢
您不应该将登录表单设置为主表单,因为它在应用程序运行的大部分时间内都不会处于活动状态,而且您有另一个表单,在逻辑上是应用程序的主表单。
转到program.cs文件,将您的主窗体设置为Application.Run
中的窗体,使其真正成为应用程序的主窗体。在主窗体的Load
事件Hide
中,使用ShowDialog
显示您的登录窗体。关闭登录窗体后,您可以继续加载主窗体。
我建议您使用Panel
而不是新表单。将登录控件放在Panel
上并首先显示。如果用户登录成功,那么只需使面板不可见或将其从表单中删除。然后使带有主表单控件的面板可见。
if(IsLoginSuccess)
{
panel.Visible = false;
mainFormControlsPanel.Visible = true;
}
此外,我相信它应该比你的方法更快。
希望能有所帮助。
我建议这样做:
static void Main(string[] args) {
var formLogin = new FormLogin();
formLogin.ShowDialog();
Application.Run(new FormMain(formLogin.UserName, formLogin.Password));
}
你需要设置你的程序.cs,这样做更像:
DialogResult result = DialogResult.Cancel;
while (result != DialogResult.OK)
{
using (LoginForm loginForm = new LoginForm())
{
result = loginForm.ShowDialog();
if (result != DialogResult.OK) continue;
if (!AuthenticateCredentialsSomehow.Authenticate(loginForm.Username, loginForm.Password))
{
MessageBox.Show("Login Failed!");
result = DialogResult.Cancel;
continue;
}
MainForm mainForm = new MainForm(loginForm.Username, loginForm.Password);
Application.Run(mainForm);
}
}
这样,当你完成登录表单时,它就会消失,一旦登录成功,应用程序就会在你的主表单上运行。