2010-01-25 17 views
9

में Windows पैनल नियंत्रण में कीप्रेस घटना प्राप्त करने के लिए सी # में खिड़कियों पैनल नियंत्रण में कुंजी दबाने घटना प्राप्त करना चाहते हैं,मैं कैसे सी #

+1

पैनल पर क्लिक करें। गुणों (पैनल के) का दूसरा टैब घटनाओं को दिखाता है कि यह आग लग सकता है। KeyPressEvent और voila – RvdK

+1

@PowerRoy पर डबल क्लिक करें, जो काम नहीं करेगा, पैनल KeyPressEvent विधि का पर्दाफाश नहीं करता है। यह केवल पूर्वावलोकनकी घटना का खुलासा करता है। – James

+0

पूर्वावलोकनकी ठीक काम करता है अगर आप अपने मूसडाउन घटना में पैनल पर फ़ोकस सेट करते हैं। – TaW

उत्तर

10

आप Panel.KeyPress घटना संभाल चाहिए मेरे लिए शरीर के किसी भी मदद की है ...।

उदाहरण

public void MyKeyPressEventHandler(Object sender, KeyPressEventArgs e) 
{ 
    ... do something when key is pressed. 
} 

... 

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler); 
+0

हाय धन्यवाद असल में मुझे अपने पैनल नियंत्रण के लिए कीप्रेस इवेंटहैंडर नहीं मिल रहा है, क्या आप मुझे बता सकते हैं कि यह कैसे प्राप्त करें .. – ratty

+0

बस जेम्स ने लिखा उदाहरण का प्रयास करें। (MyPanel नियंत्रण के रूप में) .KeyPres वहां होंगे, अगर आप बिल्कुल लिखते हैं (MyPanel नियंत्रण के रूप में) जहां MyPanel आपके विंडोज़ पैनल नियंत्रण है। –

+8

मुझे पता है कि यह गेम में थोड़ा देर हो चुकी है, लेकिन पैनल नियंत्रण को फोकस के बिना मुख्य संबंधित घटनाएं प्राप्त नहीं होंगी, और पैनल पर क्लिक करने से स्वाभाविक रूप से इसे ध्यान नहीं दिया जाएगा। आप पैनल के लिए माउसडाउन इवेंट हैंडलर में MyPanel.Focus() को कॉल करके इसे प्राप्त कर सकते हैं। एक बार जब पैनल फोकस कर लेता है, तो कुंजीपटल, कीडाउन, और कीप्रेस इवेंट कार्य करेगा, यहां तक ​​कि मूल प्रपत्र पर सक्रिय कीप्राव्यू के बिना भी। – user1689175

9

समस्या है, कि पहली बार में अपने मुख्य रूप कुंजी दबाने हो गया और तुरंत सक्रिय नियंत्रण को यह संदेश भेजेगा। यदि यह इस कुंजी प्रेस को संभाल नहीं करता है तो इसे अभिभावक नियंत्रण पर बुलबुला किया जाएगा और इसी तरह।

इस श्रृंखला को बीच में रोकने के लिए, आपको अपने Form.KeyPreviewtrue करने के लिए है और Form.KeyPress के लिए एक हैंडलर जोड़ने। अब आप दबाए गए कुंजी को अपने फॉर्म में संभाल सकते हैं।

2

"पैनल" ऑब्जेक्ट्स "KeyPress" ईवेंट को सही तरीके से प्राप्त नहीं कर सकता है।

मेरे द्वारा बनाए गए Panel अधिभार:

public class PersoPanel : Panel 

और ओवरराइड विधि ProcessCmdKey प्रयोग किया है:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 

दबाया कुंजी रोकना:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    MessageBox.Show("You press " + keyData.ToString()); 

    // dO operations here... 

    return base.ProcessCmdKey(ref msg, keyData); 
}