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

时间:2012-02-26 18:57:00

标签: c# xna xna-4.0 key

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

投射不起作用,因为,例如Keys.F5之类的键,当投放到角色时,会变成字母t。在这种情况下,F5会被视为字母或数字,但显然不是。

那么,如果一个给定的Keys枚举值是一个字母或数字,如果给某个角色投射会产生不可预测的结果呢?

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:2)

鉴于“数字键”对应于Keys枚举中的特定范围,您难道不能只检查您的密钥是否属于任何范围吗?

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

答案 2 :(得分:0)

拥有自己的HashSets表/一组,以便将Keys枚举映射到您感兴趣的类型。

只有大约一百个不同的值 - 因此表格不会太大。如果您担心内存中的大小 - 每个枚举值为一个字节(如果使用由Keys值索引的字节数组)。

相关问题