如何确定密钥是字母还是数字

本文关键字:数字 密钥 何确定 | 更新日期: 2023-09-27 18:25:48

KeyboardState.GetPressedKeys()返回当前按下的键的Key数组。通常,为了确定键是字母还是数字,我会使用Char.IsLetterOrDigit(char),但给定的类型是Keys枚举,因此没有KeyChar属性。

强制转换也不起作用,因为例如,像Keys.F5这样的键在强制转换为字符时会变成字母t。在这种情况下,F5将被视为一个字母或数字,但显然不是。

那么,考虑到对字符的强制转换会产生不可预测的结果,如何确定给定的Keys枚举值是字母还是数字呢?

如何确定密钥是字母还是数字

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);
}

假设"数字键"对应于Keys枚举中的特定范围,难道不能检查您的键是否属于任何范围吗?

Keys[] keys = KeyboardState.GetPressedKeys();
bool isDigit = keys.Any(key =>
    key >= Keys.D0      && key <= Keys.D9 || 
    key >= Keys.NumPad0 && key <= Keys.NumPad9);

拥有自己的表/哈希集集,将Keys枚举映射到您感兴趣的类型。

只有大约一百个不同的值,所以表不会太大。如果您担心内存中的大小,它是每个枚举值一个字节(如果使用由Keys值索引的字节数组)。