2012-02-26 90 views
8

KeyboardState.GetPressedKeys()返回Key當前按鍵的數組。通常情況下,以找出是否有鍵按下一個字母或數字,我會用Char.IsLetterOrDigit(char)但給定類型爲Keys枚舉的,因此沒有KeyChar財產。如何確定密鑰是字母還是數字?

鑄造不起作用,或者因爲,例如,像Keys.F5這樣的鍵被鑄造成字符時,成爲字母t。在這種情況下,F5將被視爲一個字母或數字,當它顯然不是。

那麼,怎麼可能確定給定Keys枚舉值是一個字母或數字,因爲強制轉換爲字符描述了不可預知的結果?

+0

您希望F5被標記爲字母或數字嗎? – Dharun 2012-02-26 19:00:32

+1

看看這裏 http://stackoverflow.com/questions/5718541/check-if-keys-is-letter-digit-special-symbol – Kamil 2012-02-26 19:04:30

+0

@SwearWord:否。問題是,當'Keys.F5'被鑄造成一個角色變成't'。 'Keys.F5'應該失敗,*是字母或數字*測試。從MSDN XNA論壇 – 2012-02-26 19:06:14

回答

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

那麼糟糕的「ä」呢? – CodesInChaos 2012-02-26 19:17:22

+2

在Keys枚舉中找不到它(http://msdn.microsoft.com/zh-cn/library/microsoft.xna.framework.input.keys.aspx) – max 2012-02-26 19:22:45

0

有自己的表/套HashSets來Keys枚舉映射到你的類型有興趣。

只有大約一百個不同的價值觀 - 所以表將不會太大。如果您擔心內存大小 - 每枚舉值爲一個字節(如果使用由Keys值索引的字節數組)。

2

鑑於「數字鍵」對應於特定範圍內的Keys枚舉內,不能你剛纔檢查按鍵是否屬於任何範圍?

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