Как перепроверить поле A из поля B с помощью TextChanged? - PullRequest
0 голосов
/ 05 декабря 2011

У меня тут небольшая проблема.Вот моя ситуация:

Я набираю имя пользователя: tester (действительное имя пользователя; избегать всех проверок), а затем введите пароль: testerr (действительный пароль; избегая всех проверок).Проблема в том, что я проверяю те же входные данные.И в моем коде, когда оба входа одинаковы, я увижу уведомление.Теперь, когда я вписываю tester в качестве имени пользователя и пароля, я получаю сообщение об ошибке, но когда я добавляю в свой пароль дополнительный символ 'testerr', я делаю пароль действительным, но имя пользователя проверяется как недействительное, говоря, что оба они одинаковы, и делаетмоя проверка невозможна.

Как этого избежать?Я думал о перепроверке поля имени пользователя из поля 2, но я не уверен, как.

bool passIsValid, userIsValid;

public AuthenticationWindow()
{
    InitializeComponent();

    // Creating TextChanged events which till validate input fields.
    txtUserName.TextChanged += new EventHandler(txtUserName_TextChanged);
    txtPassword.TextChanged += new EventHandler(txtPassword_TextChanged);
}

private void txtUserName_TextChanged(object sender, EventArgs e)
{
    // Checking for empty user name field.
    if (string.IsNullOrEmpty(txtUserName.Text))
    {
        lblMessageUser.Text = "User Name field cannot be empty!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    // Making sure that user name is at least 6 characters long.
    else if (txtUserName.Text.Length < 6)
    {
        lblMessageUser.Text = "User Name field must be at least 6 characters long!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    // Checking for user name made of same repeating character.
    // Invalid example: 'aaaaaa'
    else if (!txtUserName.Text.Distinct().Skip(1).Any())
    {
        lblMessageUser.Text = "User Name cannot be made of repeating the same characters!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    // Making sure that password and user name aren't the same.
    else if (txtUserName.Text == txtPassword.Text)
    {
        lblMessageUser.Text = "User Name and Password can not be the same!";
        lblMessagePass.Text = "User Name and Password can not be the same!";
        lblMessageUser.ForeColor = Color.IndianRed;
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
        passIsValid = false;
    }
    // If all other checks aren't trigered; enable authentication.
    else
    {
        lblMessageUser.Text = "User Name is valid.";
        lblMessageUser.ForeColor = Color.Green;

        userIsValid = true;

        if (passIsValid && userIsValid)
        {
            btnAuthenticate.Enabled = true;
        }
    }
}

private void txtPassword_TextChanged(object sender, EventArgs e)
{
    // Checking for Null or Empty string in password field.
    if (string.IsNullOrEmpty(txtPassword.Text))
    {
        lblMessagePass.Text = "Password field cannot be empty!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    // Making sure that password is at least 6 characters long.
    else if (txtPassword.Text.Length < 6)
    {
        lblMessagePass.Text = "Password field must be at least 6 characters long!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    // Checking for password made of same repeating character.
    // Invalid example: 'aaaaaa'
    else if (!txtPassword.Text.Distinct().Skip(1).Any())
    {
        lblMessagePass.Text = "Password cannot be made of repeating the same characters!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    // Making sure that user name and password are not the same.
    // Security measure.
    else if (txtUserName.Text == txtPassword.Text)
    {
        lblMessageUser.Text = "User Name and Password can not be the same!";
        lblMessagePass.Text = "User Name and Password can not be the same!";
        lblMessageUser.ForeColor = Color.IndianRed;
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
        passIsValid = false;
    }
    // If all other checks aren't trigered; enable authentication.
    else
    {
        lblMessagePass.Text = "Password is valid.";
        lblMessagePass.ForeColor = Color.Green;

        passIsValid = true;

        if (passIsValid && userIsValid)
        {
            btnAuthenticate.Enabled = true;
        }
    }
}

1 Ответ

1 голос
/ 05 декабря 2011

Вы можете объединить оба события в одно, тогда пользователь увидит все ошибки и ваша проверка может быть успешной.

bool passIsValid, userIsValid;

public AuthenticationWindow()
{
    InitializeComponent();

    // Creating TextChanged events which till validate input fields.
    txtUserName.TextChanged += new EventHandler(txtCheck_TextChanged);
    txtPassword.TextChanged += new EventHandler(txtCheck_TextChanged);
}

private void txtCheck_TextChanged(object sender, EventArgs e)
{
    // Checking for empty user name field.
    if (string.IsNullOrEmpty(txtUserName.Text))
    {
        lblMessageUser.Text = "User Name field cannot be empty!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    // Making sure that user name is at least 6 characters long.
    else if (txtUserName.Text.Length < 6)
    {
        lblMessageUser.Text = "User Name field must be at least 6 characters long!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    // Checking for user name made of same repeating character.
    // Invalid example: 'aaaaaa'
    else if (!txtUserName.Text.Distinct().Skip(1).Any())
    {
        lblMessageUser.Text = "User Name cannot be made of repeating the same characters!";
        lblMessageUser.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
    }
    else
    {
        userIsValid = true;
        lblMessageUser.Text = "Password is valid.";
        lblMessageUser.ForeColor = Color.Green;
    }

    // Checking for Null or Empty string in password field.
    if (string.IsNullOrEmpty(txtPassword.Text))
    {
        lblMessagePass.Text = "Password field cannot be empty!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    // Making sure that password is at least 6 characters long.
    else if (txtPassword.Text.Length < 6)
    {
        lblMessagePass.Text = "Password field must be at least 6 characters long!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    // Checking for password made of same repeating character.
    // Invalid example: 'aaaaaa'
    else if (!txtPassword.Text.Distinct().Skip(1).Any())
    {
        lblMessagePass.Text = "Password cannot be made of repeating the same characters!";
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        passIsValid = false;
    }
    else
    {
        passIsValid = true;
        lblMessagePass.Text = "Password is valid.";
        lblMessagePass.ForeColor = Color.Green;
    }

    // Making sure that user name and password are not the same.
    // Security measure.
    if (txtUserName.Text == txtPassword.Text)
    {
        lblMessageUser.Text = "User Name and Password can not be the same!";
        lblMessagePass.Text = "User Name and Password can not be the same!";
        lblMessageUser.ForeColor = Color.IndianRed;
        lblMessagePass.ForeColor = Color.IndianRed;
        btnAuthenticate.Enabled = false;
        userIsValid = false;
        passIsValid = false;
    }

    // If all other checks aren't trigered; enable authentication.
    if (passIsValid && userIsValid)
    {
        btnAuthenticate.Enabled = true;
    }
}
...