SIP: Key.Shift не обнаруживается - PullRequest
1 голос
/ 12 ноября 2011

Я пытаюсь создать текстовое поле, которое принимает только буквы и цифры и отбрасывает все специальные символы. Мне нужно это для ввода правильного имени файла без расширения. Я использую следующий код:

private void txtFName_KeyDown(object sender, KeyEventArgs e)
{
    if (!(((e.Key >= Key.A) && (e.Key <= Key.Z)) || ((e.Key >= Key.D0) && (e.Key <= Key.D9)) || (e.Key == Key.Shift) || (e.Key == Key.Back)))
    {
        e.Handled = true;
        MessageBox.Show("No Special Characters are Allowed!");
    }
}

К сожалению, событие «KeyPress» отсутствует, поэтому я понял, что это лучший способ добиться того, что я делаю.

Проблема, с которой я сталкиваюсь:

Как видно из приведенного выше кода, я позаботился о нажатии клавиши «Shift», но когда я нажимаю клавишу «Shift» на SIP, появляется сообщение «Никаких специальных символов» 3 раз, прежде чем я могу ввести алфавит в верхнем регистре! Так что это по существу не позволяет мне вводить любые символы верхнего регистра.

Хуже того, он принимает все символы! @ # $% ^ & * (). Вероятно, потому что он определяет их как числа от 0 до 9. Похоже, что коды клавиш возвращаются одинаково для 2 и @, 3 и # и так далее. Это очень странное поведение! И я даже не могу использовать клавишу подчеркивания с вышеуказанной техникой.

Такое поведение явно недопустимо в профессиональном приложении.

Как я могу создать текстовое поле, которое принимает только алфавиты, цифры и подчеркивание и отбрасывает все остальные символы? Кроме того, существует ли проблема с тем, что клавиша «Shift» не обнаруживается?

1 Ответ

0 голосов
/ 28 февраля 2012

Если я понимаю ваш запрос, вы хотите проверить текстовое поле.

Я бы использовал регулярные выражения для этого:

using System.Text.RegularExpressions;

// Add chars which you don't want the user to be able to enter
private Regex regularExpression = new Regex(@"!@#$%^&*().", RegexOptions.IgnoreCase);

// Your text changed event handler
private void txtInput_TextChanged(object sender, TextChangedEventArgs e)
{
    // Replace the forbidden char with ""
    txtInput.Text = regularExpression.Replace(txtInput.Text, "");
    txtInput.SelectionStart = txtInput.Text.Length;
}

Надеюсь, это сработает для вас.

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