Я пытаюсь создать текстовое поле, которое принимает только буквы и цифры и отбрасывает все специальные символы. Мне нужно это для ввода правильного имени файла без расширения.
Я использую следующий код:
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» не обнаруживается?