Как определить, является ли ключ буквой или цифрой? - PullRequest
8 голосов
/ 26 февраля 2012

KeyboardState.GetPressedKeys() возвращает массив Key нажатых в данный момент клавиш.Обычно, чтобы узнать, является ли ключ буквой или цифрой, я бы использовал Char.IsLetterOrDigit(char), но данный тип имеет перечисление Keys и в результате не имеет свойства KeyChar.

Приведение не работает, потому что, например, такие ключи, как Keys.F5, при наведении на символ становятся буквой t.В этом случае F5 будет тогда рассматриваться как буква или цифра, если это явно не так.

Итак, как можно определить, является ли данное значение перечисления Keys буквой или цифрой, еслиприведение к персонажу дает непредсказуемые результаты?

Ответы [ 3 ]

12 голосов
/ 26 февраля 2012
public static bool IsKeyAChar(Keys key)
{
    return key >= Keys.A && key <= Keys.Z;
}

public static bool IsKeyADigit(Keys key)
{
    return (key >= Keys.D0 && key <= Keys.D9) || (key >= Keys.NumPad0 && key <= Keys.NumPad9);
}
2 голосов
/ 26 февраля 2012

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

Keys[] keys = KeyboardState.GetPressedKeys();
bool isDigit = keys.Any(key =>
    key >= Keys.D0      && key <= Keys.D9 || 
    key >= Keys.NumPad0 && key <= Keys.NumPad9);
0 голосов
/ 26 февраля 2012

Имейте свою собственную таблицу / набор HashSets для сопоставления Keys перечисление типов, которые вас интересуют.

Существует только около ста различных значений - поэтому таблица не будет слишком большой. Если вас беспокоит размер в памяти - это один байт для каждого значения перечисления (если используется байтовый массив, индексированный значениями Keys).

...