我有一个可以运行的简单程序,但在此之前,我会弹出一个登录表单来验证信息是否正确。如果是,则登录表单关闭并启动主表单。但是,当我在打开主表单后关闭登录表单时,它会关闭整个应用程序。
我的 program.cs 只是运行一个新的 frmLogin。这就是我登录时发生的情况。
frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text);
frm.Show();
this.Close();
我怎么能压制它?谢谢
我有一个可以运行的简单程序,但在此之前,我会弹出一个登录表单来验证信息是否正确。如果是,则登录表单关闭并启动主表单。但是,当我在打开主表单后关闭登录表单时,它会关闭整个应用程序。
我的 program.cs 只是运行一个新的 frmLogin。这就是我登录时发生的情况。
frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text);
frm.Show();
this.Close();
我怎么能压制它?谢谢
您不应该将登录表单设置为主表单,因为它在应用程序运行的大部分时间都不会处于活动状态,并且您有另一个表单在逻辑上是应用程序的主表单。
转到 program.cs 文件并将您的主窗体设置为 中的窗体Application.Run
,以便它确实是应用程序的主窗体。在您的主表单Load
事件中Hide
,它ShowDialog
用于显示您的登录表单。关闭登录表单后,您可以继续加载主表单。
我会建议你使用 aPanel
而不是新的形式。将您的登录控件放在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));
}
您需要设置您的 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);
}
}
这样,您的登录表单将在您完成后消失,并且一旦登录成功,应用程序将在您的主表单上运行。