3

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

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());
    }
}

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

4

4 回答 4

15

我会做以下事情:

  • 在 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 不会被初始化和显示。

于 2012-06-21T15:08:17.267 回答
2

尝试这个

LoginForm loginForm = new LoginForm();     
do {
   if (loginForm.ShowDialog() == DialogResult.Cancel) {
       return; // Ends application
   }
} while (CheckCredentials() != VALID)
Application.Run(new AutoSignerForm());
于 2012-06-21T14:57:48.973 回答
1

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

于 2012-06-21T14:56:37.570 回答
0

在 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;
    }
}
于 2012-06-21T15:19:24.307 回答