2012-02-26 23 views
8

KeyboardState.GetPressedKeys() वर्तमान में दबाए गए कुंजियों की Key सरणी देता है। आम तौर पर यह पता लगाने के लिए कि कोई कुंजी एक अक्षर या संख्या है, मैं Char.IsLetterOrDigit(char) का उपयोग करूंगा लेकिन दिया गया प्रकार Keys गणना का है और नतीजतन KeyChar संपत्ति नहीं है।यह निर्धारित करने के लिए कि कोई कुंजी एक अक्षर या संख्या है या नहीं?

कास्टिंग या तो काम नहीं करता है, उदाहरण के लिए, Keys.F5 जैसी कुंजियां, जब किसी चरित्र पर डाली जाती हैं, तो t पत्र बन जाती है। इस मामले में, F5 तब स्पष्ट रूप से नहीं होने पर एक अक्षर या अंक के रूप में देखा जाएगा।

तो, कोई यह निर्धारित कैसे कर सकता है कि दिए गए Keys गणना मूल्य एक अक्षर या अंक है, बशर्ते किसी चरित्र को कास्टिंग अप्रत्याशित परिणाम देता है?

+0

क्या आप चाहते हैं कि F5 को एक अक्षर या संख्या के रूप में फ़्लैग किया जाए? – Dharun

+1

यहाँ देखो http://stackoverflow.com/questions/5718541/check-if-keys-is-letter-digit-special-symbol – Kamil

+0

@SwearWord: नहीं समस्या यह है कि जब 'Keys.F5' एक चरित्र में डाला जाता है यह 'टी' बन जाता है। 'Keys.F5' को * अक्षर या संख्या * परीक्षण में असफल होना चाहिए। –

उत्तर

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

+2

इसे कुंजी गणना में नहीं मिल सकता है (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.keys.aspx) – max

0

अपनी रुचि रखने वाले प्रकारों के लिए 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); 
संबंधित मुद्दे

 संबंधित मुद्दे