XNA有一個方法,Keyboard.GetState()
,它返回鍵盤的狀態。您可以輪詢以查看是否通過枚舉Keys
按下了某個特定鍵,該鍵恰好與常規C#使用的「恰巧」相同。我的幫助器方法應該返回一個字符還是字符串?
不管怎麼說,我需要一種方法來枚舉轉換爲可讀取字母,例如打字到一個自定義文本框,所以我做了類似的擴展方法,以便:
public static char ToChar(this Keys obj, bool shift, bool caps)
{
switch (obj)
{
case (Keys.A): return (shift^caps) ? 'A' : 'a';
case (Keys.B): return (shift^caps) ? 'B' : 'b';
case (Keys.C): return (shift^caps) ? 'C' : 'c';
...
case (Keys.OemOpenBrackets): return (!shift) ? '[' : '{';
case (Keys.OemCloseBrackets): return (!shift) ? ']' : '}';
case (Keys.OemPipe): return (!shift) ? '\\' : '|';
case (Keys.OemSemicolon): return (!shift) ? ';' : ':';
case (Keys.OemQuotes): return (!shift) ? '\'' : '"';
case (Keys.OemComma): return (!shift) ? ',' : '<';
case (Keys.OemPeriod): return (!shift) ? '.' : '>';
case (Keys.OemQuestion): return (!shift) ? '/' : '?';
...
default: return ' ';
}
}
我並不十分關心速度,因爲這隻會被調用爲用戶可以輸入的速度,而不是緊密的循環。但是,混合箭頭鍵或向上翻頁將導致,返回一個空白字符(按默認值)。
使用char?
會更有意義嗎?在使用非打印字符的情況下返回null?或者可能是string
,這樣我可以返回String.Empty
?
根據您可能需要多少信息,字符串可能更有意義,或者您也可以創建自己的類型,該類型可能包含有關按下的鍵的上下文,並且可能同樣包含該鍵作爲其屬性之一。 – trnelson 2014-11-02 03:40:16
嘗試用'return'\ 0''替換'return''',[空字符](http://msdn.microsoft.com/en-us/library/aa691087(v = vs.71).aspx) 。 – 2014-11-02 03:44:54
我傾向於字符,因爲它感覺「更輕」,並且在按鍵環境中更有意義。我也有上下文,因爲此方法(可能)被稱爲對按鍵事件的響應。 – 2014-11-02 03:48:08