Проверка ввода пользователя на лету вызывает некоторые сложности - PullRequest
0 голосов
/ 05 декабря 2011

Интересно, есть ли лучший способ проверки текстового поля, чем использование события KeyDown. Причина в том, что мое событие не реагирует, когда оно должно. Например, в следующем коде проверка работает отлично. Я могу начать вводить символы, и пока не будет введено 6 или более символов, мне будет показано, что я должен ввести не менее 6 символов. Проблема в том, что, когда я набираю 6 символов, а затем удаляю один, получается 5 символов; это не отображает ошибку. Только когда я удаляю более 2 символов, отображается моя ошибка.

Как мне избежать этого или что еще я мог бы использовать для проверки на лету?

public AuthenticationWindow()
{
    InitializeComponent();

    // Setting up a password character.
    // We are trying to hide what text user is typing.
    txtPassword.PasswordChar = char.Parse("-");
    txtPassword.MaxLength = 20;
    txtUserName.MaxLength = 20;

    txtPassword.KeyDown += KeyDownCheck;
}

protected void KeyDownCheck(object sender, KeyEventArgs e)
{
    bool validPass = txtPassword.Text.Length < 6;

    if (validPass)
        lblMessage.Text = "Password can not be shorter than 6 characters!";
    else
        lblMessage.Text = "Password is valid.";
}

1 Ответ

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

Вместо этого следует использовать событие TextChanged.

textBox1.TextChanged += new EventHandler(txtPassword_TextChanged);

private void txtPassword_TextChanged(object sender, EventArgs e) {
    bool validPass = txtPassword.Text.Length < 6;

    if (validPass)
        lblMessage.Text = "Password can not be shorter than 6 characters!";
    else
        lblMessage.Text = "Password is valid.";

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...