3

我有一个可以运行的简单程序,但在此之前,我会弹出一个登录表单来验证信息是否正确。如果是,则登录表单关闭并启动主表单。但是,当我在打开主表单后关闭登录表单时,它会关闭整个应用程序。

我的 program.cs 只是运行一个新的 frmLogin。这就是我登录时发生的情况。

frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text);
frm.Show();
this.Close();

我怎么能压制它?谢谢

4

4 回答 4

1

您不应该将登录表单设置为主表单,因为它在应用程序运行的大部分时间都不会处于活动状态,并且您有另一个表单在逻辑上应用程序的主表单。

转到 program.cs 文件并将您的主窗体设置为 中的窗体Application.Run,以便它确实是应用程序的主窗体。在您的主表单Load事件中Hide,它ShowDialog用于显示您的登录表单。关闭登录表单后,您可以继续加载主表单。

于 2013-08-12T14:23:07.030 回答
0

我会建议你使用 aPanel而不是新的形式。将您的登录控件放在Panel并首先显示。如果用户登录成功,则只需使面板不可见或将其从表单中删除。然后使带有主窗体控件的面板可见。

if(IsLoginSuccess)
{
    panel.Visible = false;
    mainFormControlsPanel.Visible = true;
}

此外,它应该比我相信的方法更快。

希望能帮助到你。

于 2013-08-12T14:21:55.727 回答
0

我会建议类似:

static void Main(string[] args) {
        var formLogin = new FormLogin();
        formLogin.ShowDialog();
        Application.Run(new FormMain(formLogin.UserName, formLogin.Password));
}
于 2013-08-12T14:23:43.773 回答
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);
    }
}

这样,您的登录表单将在您完成后消失,并且一旦登录成功,应用程序将在您的主表单上运行。

于 2013-08-12T14:26:48.960 回答