Могу ли я определить, является ли 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;
}
Другие вопросы по тегам