如何创建winform登录对话框并保持循环

kee*_*r12 3 .net c#

创建一个登录表单,如果凭据正确,将继续进入主表单.这是基本的伪代码:

ShowLoginForm()

if (DialogResult == OK)
  CheckCredentials();
  if (credentials == VALID)
    ShowMainForm();
  else
    LoopBackAndShowLoginFormAgain();  //repeat process...
else
  CloseLoginForm();
Run Code Online (Sandbox Code Playgroud)

但是,我对WinForms相对较新,并且还在搞清楚它.我正在尝试决定将循环放在哪里(Main()或LoginForm中的某个地方).我应该在哪里检查凭证?这是我到目前为止:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    LoginForm loginForm = new LoginForm();
    if (loginForm.ShowDialog() == DialogResult.OK)
    {
        Application.Run(new AutoSignerForm());
    }
}
Run Code Online (Sandbox Code Playgroud)

我不想反复退出并打开一个登录表单(我在这里寻找一些效率,所以我想使用相同的登录对话框).任何指针,提示或想法?

Ste*_*tei 14

我会做以下事情:

  • 在Program.cs中将loginForm显示为对话框

    LoginForm login_form = new LoginForm();
    if(login_form.ShowDialog() == DialogResult.OK) {
        Application.Run(new MainForm());
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在LoginDialog中,处理"登录"按钮上的单击事件(或任何已命名的)

    // replace with the actual login
    if(textBoxUsername.Text == "my user" && textBoxPassword.Text == "my pass") {
       // save the user has logged in somewhere
       // set the dialog result to ok
       this.DialogResult = DialogResult.OK;
       // close the dialog
       this.Close();
    } else {
       // login failed
       MessageBox.show("Login failed");
       // do not close the window
    }
    
    Run Code Online (Sandbox Code Playgroud)

现在,您将保持LoginDialog显示,直到用户输入有效凭据或他放弃尝试并关闭应用程序.这样,您将只有一个LoginForm实例,这将是一个很好的用户体验.此外,您可以确保在没有用户成功登录的情况下未初始化和显示MainForm.