我有一个简单的程序运行,但在此之前,我弹出一个登录表单,验证信息是否正确。如果是,则登录表单将关闭,主表单将启动。但是,当我打开主表单后关闭登录表单时,它会关闭整个应用程序。
我的program.cs只运行一个新的frmLogin。 这是我登录时发生的事情。
frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text);
frm.Show();
this.Close();
我该如何压制?感谢
答案 0 :(得分:1)
您不应将您的登录表单设置为主表单,因为它在您的应用程序运行的大部分时间内不会处于活动状态,并且您有另一个 逻辑上的表单申请表的主要形式。
转到program.cs文件并将主窗体设置为Application.Run
中的窗体,这样它就是应用程序的主窗体。在您的主要表单的Load
活动Hide
内,并使用ShowDialog
来显示您的登录表单。当您的登录表单关闭后,您可以继续加载主表单。
答案 1 :(得分:0)
我建议您使用Panel
而不是新表单。将登录控件放在Panel
上并首先显示。如果用户登录成功,则只需使面板不可见或从表单中删除它。然后使具有主窗体控件的面板可见。
if(IsLoginSuccess)
{
panel.Visible = false;
mainFormControlsPanel.Visible = true;
}
此外它应该比我相信的方法更快。
希望它有所帮助。
答案 2 :(得分:0)
我会建议像:
static void Main(string[] args) {
var formLogin = new FormLogin();
formLogin.ShowDialog();
Application.Run(new FormMain(formLogin.UserName, formLogin.Password));
}
答案 3 :(得分:0)
您需要设置program.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);
}
}
这样一来,当您完成登录表单后,您的登录表单就会消失,一旦登录成功,应用程序将在您的主表单上运行。