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

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

ShowLoginForm() if (DialogResult == OK) CheckCredentials(); if (credentials == VALID) ShowMainForm(); else LoopBackAndShowLoginFormAgain(); //repeat process... else CloseLoginForm(); 

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

 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); LoginForm loginForm = new LoginForm(); if (loginForm.ShowDialog() == DialogResult.OK) { Application.Run(new AutoSignerForm()); } } 

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

我会做以下事情:

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

     LoginForm login_form = new LoginForm(); if(login_form.ShowDialog() == DialogResult.OK) { Application.Run(new MainForm()); } 
  • 在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 } 

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

试试这个

 LoginForm loginForm = new LoginForm(); do { if (loginForm.ShowDialog() == DialogResult.Cancel) { return; // Ends application } } while (CheckCredentials() != VALID) Application.Run(new AutoSignerForm()); 

为什么不创建主窗体然后显示登录模式对话框。 然后你可以检查做什么。

如何在SubmitButton事件处理程序中将DialogResult设置为None? 就像是:

 private void loginButton_Click(object sender, EventArgs e) { if (isValidCredentials()) DialogResult = DialogResult.OK; else { MessageBox.Show("Failed to login or some other error"); DialogResult = DialogResult.None; } }