2011-09-23 17 views
5

मैंने कुंजीपटल इनपुट पढ़ने के लिए कीप और कीडाउन घटनाओं का उपयोग करने का प्रयास किया है, लेकिन जैसे ही मैं Winform पर अन्य नियंत्रण डालता हूं, कुंजी को पढ़ा नहीं जाता है। मैं कैसे सुनिश्चित करूं कि चाबियाँ पढ़ी जाएंगी?मैं Winform पर कीबोर्ड इनपुट कैसे पढ़ूं?

+0

आप इसे खाली फार्म के लिए काम करता है और काम नहीं कर रहा है, तो वहाँ एक नियंत्रण है आपका मतलब है:

यहाँ लेख से एक उदाहरण अपनी भूख के लिए है? – Yuan

+0

हां, जैसा कि नीचे दिए गए उत्तरों में लिखा गया है, यह बटन, टेक्स्टबॉक्स इत्यादि जैसे नियंत्रणों के लिए काम करता है लेकिन जब मैं उपयोगकर्ता नियंत्रण डालता हूं तो यह काम करना बंद कर देता है। – Bildsoe

+0

यह काम नहीं करना चाहिए, कीबोर्ड इनपुट फोकस के साथ नियंत्रण में जाता है। आप वास्तव में क्या करने की कोशिश कर रहे हैं? –

उत्तर

4

आप कीबोर्ड कार्यक्रमों को पकड़ने के लिए अपने फॉर्म पर KeyPreview = true सेट कर सकते हैं।

संपादित आप समझ जाने के लिए:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.A) 
     e.SuppressKeyPress = true; 
} 

बेवकूफ नमूना है कि कुंजीपटल घटनाओं प्राप्त करता है और ड्रॉप करता है, तो एक दबाया गया था।
यदि फोकस टेक्स्टबॉक्स में है, तो आप देखेंगे कि टेक्स्ट लिखा गया है, लेकिन नहीं !!

फिर से संपादित: मैंने यह कोड VB.NET उदाहरण से लिया।
अपने उपयोगकर्ता नियंत्रण में, "उपयोगकर्ता नियंत्रण घटना" को बढ़ाने के लिए टेक्स्ट बॉक्स की "कुंजीपटल" घटना का उपयोग करें।
इस कोड को अपने कस्टम usercontrol में होगा:

'Declare the event 
Event KeyPress(KeyAscii As Integer) 

Private Sub Text1_KeyPress(KeyAscii As Integer) 
    RaiseEvent KeyPress(KeyAscii) 
End Sub 
+0

यह काम नहीं किया, मैं अभी भी कोई इनपुट पंजीकृत नहीं कर रहा हूं। – Bildsoe

+0

@ बिल्डसो: मैंने कोशिश की और यह काम करता है। आपको फॉर्म पर 'कीडाउन' और' कीप 'घटनाएं पकड़नी चाहिए: आप उन्हें प्राप्त करेंगे, सुनिश्चित करें। अगर आपका कोड पोस्ट न करें, क्योंकि कुछ गलत होना चाहिए ... – Marco

+0

ठीक है धन्यवाद, मैं कोशिश करूंगा, मैंने कुछ गलत किया होगा। मेरे पास मेरे फॉर्म पर उपयोगकर्ता नियंत्रण है, क्या यह कुछ भी बदलता है? – Bildsoe

2

जैसा कि मार्को कहता है कि केवल एक नियंत्रण के बजाय पूरे रूप में महत्वपूर्ण घटनाओं को पकड़ने के लिए अपने फॉर्म पर सत्यप्रूव्यू सेट करना है।

कुंजीपटल ईवेंट का उपयोग करें ... कुंजीपटल/डाउन आपके कोड की तुलना में ढांचे के लिए अधिक हैं। KeyDown अच्छा है यदि आप एक कुंजी को अक्षम करना चाहते हैं ... संख्यात्मक केवल फ़ील्ड इत्यादि। सामान्य कीप्रेस में वह है जिसे आप बाद में कर रहे हैं।

यदि आप कीस्ट्रोक को अन्य नियंत्रणों को सेट करने से रोकना चाहते हैं तो KeyPressEventArgs.Handled = true।

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx

आप ईवेंट हैंडलर ऊपर वायर्ड है?

MyForm.KeyDown += MyHandler; 

तुम भी गुण में ऐसा कर सकते हैं फलक ... क्लिक करें घटना आइकन ...

+0

मुझे दोनों ऊपर और नीचे की जरूरत है। मैं दबाए जा रहे चाबियों को देखना चाहता हूं, इसलिए कुंजीअप और कीडाउन दोनों पर कुछ होने की आवश्यकता है। – Bildsoe

+0

आह मैं देखता हूं ... KeyUp/Down को वही काम करना चाहिए। क्या आपने ईवेंट हैंडलर को तार दिया है? घटना अनुभाग में या कोड में गुण फलक में या तो? MyForm.KeyDown + = MyEventHandler; – iDevForFun

+0

हां मैंने इवेंट हैंडलर को तार दिया था। यह काम करता है, लेकिन अगर मैं फॉर्म पर उपयोगकर्ता नियंत्रण नहीं डालता तो यह काम करना बंद कर देता है। – Bildsoe

0

आप देख रहे हैं अपने फार्म ही कीबोर्ड इनपुट को पढ़ने के लिए, आप पहले से ही अपना उत्तर है अन्य संवाददाता। मैं इस योगदान को इस संभावना के लिए जोड़ रहा हूं कि आप अपने फॉर्म पर अन्य नियंत्रण या उपयोगकर्ता नियंत्रण में कुंजी हैंडलिंग जोड़ना चाहेंगे। मेरा लेख Exploring Secrets of .NET Keystroke Handling DevX.com पर प्रकाशित हुआ है (हां, इसे पंजीकरण की आवश्यकता है लेकिन यह मुफ़्त है) आपको इस बारे में एक व्यापक चर्चा देता है कि कैसे और क्यों सभी विभिन्न हैंडलिंग हुक और घटनाएं खेलती हैं। इसके अलावा, आलेख में मुफ्त डाउनलोड के लिए "कीस्ट्रोक सैंडबॉक्स" उपयोगिता शामिल है जो वास्तव में आपको यह देखने देती है कि किन नियंत्रणों को कौन सा नियंत्रण प्राप्त हो रहा है।

enter image description here

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