2011-09-06 13 views
11

से चार प्राप्त करें मैं एक कस्टम टेक्स्ट एडिटर कोडिंग कर रहा हूं, और मैं कीडाउन और कीप घटनाओं का उपयोग करता हूं। उन घटनाओं को पैरामीटर से KeyEventArgs मिलता है जहां "कुंजी" उदाहरण शामिल होता है।कुंजी

मैं उस "कुंजी" को वास्तविक चार में कैसे बदल सकता हूं?

कुंजी के साथ Key.ToString() का उपयोग करना। " मुझे "ओमेपेरियोड" मिलता है या "," मुझे "ओमेकोमा" मिलता है। मैं सीधे उन मानों को बदल सकता हूं ... लेकिन यह एक कठिन काम है, और मुझे यकीन है कि उस वर्ग को अस्तित्व में रखना चाहिए जो कि कुंजी को वास्तविक "char" में बदल देता है।

धन्यवाद!

सम्मान।

+1

यह पहले से ही चर्चा की गई http://stackoverflow.com/questions/7103360/how-to-get-pressed-char-from-system-windows-input-keyeventargs – Samich

+0

मैं http के जवाब लगता है: // stackoverflow.com/questions/544141/how-to-convert-a-character-in-to-equivalent-system-windows-input-key-enum-value प्रश्न मदद कर सकता है। – Dmitriy

+0

संभावित डुप्लिकेट [सी # वर्चुअल कीकोड का अनुवाद कैसे करें?] (Http://stackoverflow.com/questions/318777/c-sharp-how-to-translate-virtual-keycode-to-char) – bummi

उत्तर

3

यहां मुख्य समस्या यह है कि जिस घटना को आप पकड़ रहे हैं वह रील कीबोर्ड ईवेंट है और कुंजी वास्तव में एक कुंजी है और चरित्र नहीं है। बीच में कीपैप है! उदाहरण के लिए, जब Shift-A टाइप करते हैं, तो आपको कुंजीपटल के लिए एक के बजाय दो ईवेंट प्राप्त होंगे।

इस चर्चा में मदद कर सकते हैं: C# How to translate virtual keycode to char?

3

KeyDown घटना उपयोग करने के बजाय, TextInput घटना उपयोग करके देखें। एक ईवेंट हैंडलर कि इस तरह दिखता है संलग्न करें:

private void Grid_TextInput(object sender, TextCompositionEventArgs e) 
{ 
    Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0]; 
    Debug.WriteLine(keyChar); 
} 

ध्यान दें, यह केवल पहली बाइट पकड़ लेता है, और यह अंतरराष्ट्रीय (यूनिकोड) पाठ के लिए काम नहीं करेगा। यह या तो अधिक जटिल पाठ इनपुट घटनाओं के लिए काम नहीं कर सकता है, इसलिए सलाह दी जानी चाहिए!

कुछ और जानकारी के लिए this MSDN article देखें।

+0

कई हैं wpf में textinput को कैप्चर करने के लिए प्रश्न, कुछ उत्तर सिस्टम डीएलएस को भी रेफर कर रहे हैं। लेकिन आपका जवाब अब तक सबसे अच्छा है मैंने देखा है – jflepp

3

यह आपको वास्तव में आप क्या जरूरत है देता है .... कि कीबोर्ड की कुंजी कोड से बहुत लोकेल विशिष्ट चरित्र ...

how to capture the '#' character on different locale keyboards in WPF/C#?

+0

धन्यवाद! यह वही है जो मैं ढूंढ रहा हूं! –

-4

e.KeyValue कास्ट चार करने के लिए। उदाहरण के लिए:

उदाहरण के लिए।

private void myTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    char pressedCharacter = (char)e.KeyValue; 
} 
+0

कोई e.KeyValue – MSL

+0

ऐसा नहीं है जो मैं अपने उद्देश्यों के लिए करता था। सहायक उत्तर के लिए धन्यवाद! –

+0

मुझे अभी एहसास हुआ कि यह खराब परिणाम लौटा सकता है और शायद इसका उपयोग नहीं किया जाना चाहिए। जब मैं इसका उपयोग कर रहा था तो मैंने 'नंबरपैड 8' कुंजी दबाई और यह '104' की कुंजीवैल के साथ कीडाटा और कीकोड जैसी दिखाई देती है। दूसरी तरफ '(char) e.KeyValue' का उपयोग करते समय मान' 104' वर्ण 'h' में बदल जाता है और '8' नहीं! –

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