验证 2 次验证后,仅弹出一个消息框

本文关键字:验证 一个 消息 | 更新日期: 2023-09-27 18:31:27

abstract class User
{
    public string Username;
    public string Password;
    public virtual bool Validate(string username, string password)
    {
        Username = "";
        Password = "";
        if (password == Password && username == Username)
        {
            MessageBox.Show("Incorrect password or username");
            return true;
        }
        else
        {
            return false;
        }
    }

表单代码:

 private void btnSubmit_Click(object sender, EventArgs e)
    {
      UserAdmin admin = new UserAdmin();
      UserEmployee empp = new UserEmployee();
      bool validateAdmin =  admin.Validate(txtUsername.Text, txtPassword.Text);
      bool validateEmpp  = empp.Validate(txtUsername.Text, txtPassword.Text);
      if (validateAdmin==true || validateEmpp == true )
      {
          this.Hide();
          // Create a new instance of the options class
          Options opt = new Options();
          opt.Closed += (s, args) => this.Close();
          // Show the settings form
          opt.Show();
      }

当第一个验证为假时,它也会继续检查第二个验证。通过这样做,将弹出 2 个消息框。

编辑:您可以只显示一个消息框而不是 2 个吗?仅当用户名或密码不正确时,它才会显示消息框

验证 2 次验证后,仅弹出一个消息框

您可以在条件表达式中组合验证:

if(admin.Validate(txtUsername.Text, txtPassword.Text) && empp.Validate(txtUsername.Text, txtPassword.Text))
{
    ... // is ok
}
else
{
    ... // when either Validate from left to right is not ok
}

这样,如果admin.Validate返回false,则不会验证empp

我会说停止执行代码的标准方法 - 是抛出异常。所以你可以做的 - 抛出一个"ValidationExceptio"并实现适当的exhandler

若要停止显示两个消息框,请从方法中删除消息框并将其包含在单击事件中。所以方法将是这样的:

public virtual bool Validate(string username, string password)
    {
        if (password == Password && username == Username)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

点击事件将如下所示:

private void btnSubmit_Click(object sender, EventArgs e)
    {
        UserAdmin admin = new UserAdmin();
        UserEmployee empp = new UserEmployee();
        bool validateAdmin = admin.Validate(txtUsername.Text, txtPassword.Text);
        bool validateEmpp = empp.Validate(txtUsername.Text, txtPassword.Text);
        if (validateAdmin)
        {
            MessageBox.Show("Successfylly login as Admin");
            //operation here 
        }
        else if (validateEmpp)
        {
            MessageBox.Show("Successfylly login as " + txtUsername.Text);
            //operation here 
        }
        else { MessageBox.Show("Incorrect password or username"); }
    }