नहीं पहुंच रही हैं मूल रूप से, मेरे पास एक कस्टम नियंत्रण वाला एक रूप है (और कुछ और नहीं)। कस्टम नियंत्रण पूरी तरह खाली है, और फ़ॉर्म में KeyPreview को सत्य पर सेट किया गया है।तीर कुंजी घटनाएं
इस सेटअप के साथ, मुझे किसी तीर कुंजी या टैब के लिए कोई भी कुंजीडाउन ईवेंट नहीं मिल रहा है। मेरे कीबोर्ड पर मौजूद हर दूसरी कुंजी काम करता है। मेरे पास कुंजीडाउन इवेंट हैंडलर हैं जो इस तरह की घटनाओं में सबकुछ लगाते हैं, इसलिए मुझे यकीन है कि मुझे कुछ भी याद नहीं है।
यह भी ध्यान में है कि अगर मैं (पूरी तरह खाली) कस्टम नियंत्रण को हटा देता हूं, तो मुझे तीर कुंजी घटनाएं मिलती हैं।
पृथ्वी पर क्या चल रहा है?
संपादित करें:
मैं दोनों फार्म और नियंत्रण को यह कहा, लेकिन मैं अभी भी तीर कुंजी हो रही नहीं कर रहा हूँ:
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x100: //WM_KEYDOWN
//this is the control's version. In the form, it's this.Text
ParentForm.Text = ((Keys)m.WParam).ToString();
break;
}
base.WndProc(ref m);
}
मैं भी जासूस के साथ ++ जाँच की, और निर्धारित किया है कि प्रपत्र पर ही किसी भी WM_KEYDOWN संदेश नहीं मिल रहे हैं, वे सभी नियंत्रण में जा रहे हैं। हालांकि, यह कहा गया है कि नियंत्रण तीर कुंजी WM_KEYDOWN संदेश प्राप्त कर रहा है। आह।
संपादित करें 2: मैंने इस संस्करण के साथ ज़िप फ़ाइल भी अपडेट की है। कृपया इसे देखेंगे, तो आपको मदद करना चाहते हैं ...
संपादित करें 3:
मैं इस समझ गए होंगे, एक तरह से। यह फार्म तीर कुंजी खा रहा है, शायद अपने बच्चों के बीच ध्यान बनाए रखने के प्रयास में। यह इस तथ्य से साबित होता है कि अगर फॉर्म खाली है तो मुझे घटनाएं मिलती हैं।
public override bool PreProcessMessage(ref Message msg) {
switch (msg.Msg) {
case 0x100: //WM_KEYDOWN
return false;
}
return base.PreProcessMessage(ref msg);
}
जब मैं इसे ओवरराइड, प्रपत्र अपने गंदे काम करने के लिए एक मौका नहीं मिलता है, और इसलिए:
वैसे भी, अगर मैं रूप में यह कोड शामिल है, मैं घटनाओं फिर से शुरू हो मुझे उम्मीद है कि मेरी कुंजीडाउन घटनाएं मिलती हैं। मुझे लगता है कि इसका एक दुष्प्रभाव यह है कि अब मैं फॉर्म को नेविगेट करने के लिए अपने कीबोर्ड का उपयोग नहीं कर सकता (इस मामले में एक बड़ा सौदा नहीं है, क्योंकि यह एक गेम है, और इस अभ्यास का पूरा उद्देश्य कीबोर्ड नेविगेशन को कार्यान्वित करना है!)
सवाल अब भी यह कैसे "ठीक से" निष्क्रिय करने के लिए के बारे में बनी हुई है, अगर वहाँ एक तरीका है ...
ऐसा लगता है कि आपका उपयोगकर्ता नियंत्रण उस फॉर्म को कैप्चर कर रहा है जो ईवेंट को कैप्चर कर रहा है और इसे आपके उपयोगकर्ता नियंत्रण को प्राप्त करने से पहले इसे संभालने के लिए सेट कर रहा है। क्या आप यह सुनिश्चित कर रहे हैं कि कुंजी दबाए जाने पर आपके उपयोगकर्ता नियंत्रण पर ध्यान केंद्रित किया जाए? –