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

时间:2016-01-21 12:53:23

标签: c# validation

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

当第一次验证为false时,它也会继续检查第二次验证。这样就会弹出2个消息框。

编辑: 你能只显示一个消息框而不是2吗?如果用户名或密码不正确,它只显示消息框

3 个答案:

答案 0 :(得分:0)

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

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未经过验证。

答案 1 :(得分:0)

我会说停止执行代码的标准方法是抛出异常。所以你可以做的是抛出'ValidationExceptio'并实现适当的ex处理程序

答案 2 :(得分:0)

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

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