Могу ли я определить, является ли KeyEventArg буквой или цифрой?
Есть ли способ определить, является ли ключ буквой / цифрой (A-Z
,0-9
) в KeyEventArgs
? Или я должен сделать это сам? Я нашел способ с e.KeyCode, это точно?
if(((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z )
|| (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 )
|| (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
3 ответа
Решение
Вы можете использовать char.IsLetterOrDigit()
метод на KeyCode
из аргументов события:
bool isLetterOrDigit = char.IsLetterOrDigit((char) keyEventArgs.KeyCode);
В WPF? Используйте события PreviewTextInput или TextInput вместо KeyDown
Char.IsLetter() принимает некоторые коды клавиш OEM, которые обрабатывались как буквенные символы.
В моем случае, когда я набирал клавиатуру (тильда), этот ключевой код был возвращен OEM3.
Я проверил значение (тильда), и он говорит
"192 'A'"
Но на самом деле набирать "А" было
"65 'А'"
В результате оба передали Char.IsLetter() как True.
Чтобы этого избежать, я поместил код ниже.
private bool IsAlphabetOrDigit(System.Windows.Forms.KeyEventArgs e)
{
var keyCode = (char)e.KeyCode;
if ( false == char.IsNumber( keyCode ) && false == ((keyCode >= 'a' && keyCode <= 'z') || (keyCode >= 'A' && keyCode <= 'Z')))
{
return false;
}
return true;
}