2009-09-06 13 views
5

मैं ICSharpCode.TextEditor के लिए एक ऑटो-पूर्ण फ़ंक्शन बनाने का प्रयास कर रहा हूं। लेकिन फ़ाइल Tabs_KeyDown एंटर/बैकस्पेस/टैब/...ICSharpCode.TextEditor - KeyDown समस्या

मैंने सक्रिय संपादक को एक नया KeyEventHandler जोड़ने की कोशिश की लेकिन यह मेरे KeyDown फ़ंक्शन को कॉल नहीं करता है।

शायद मैं सीधे विंडोज़ संदेशों का अनुरोध कर सकता हूं लेकिन मुझे नहीं पता कि यह कैसे करना है क्योंकि हर कोई केवल ई.केडडाउन या ई.केपप्रेस घटनाओं का उपयोग कर रहा है।

कृपया मदद ...

+1

मैंने KeyStates – zee

+2

प्राप्त करके इस समस्या को हल किया है, कृपया अपना समाधान एक उत्तर के रूप में प्रदान करें ताकि अन्य लोगों को यह समस्या आसानी से मिल सके। – mkchandler

+0

@zee आपने यह कैसे किया, क्या आप उत्तर दे सकते हैं? – MoonKnight

उत्तर

8

ICSharpCode.TextEditor एक समग्र नियंत्रण है। यदि आप ईवेंट हैंडलर को मुख्य टेक्स्ट एडिटर में संलग्न करते हैं, तो आपको कोई ईवेंट नहीं मिलेगा। आपको textEditor.ActiveTextAreaControl.TextArea पर ईवेंट से अटैचमेंट करना होगा।

इसके अलावा, टेक्स्ट एडिटर स्वयं ही घटनाओं को संभालने वाला है। कुंजी प्रेस को अवरुद्ध करने के लिए, विशेष ईवेंट textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler का उपयोग करें।

+0

धन्यवाद डैनियल, पिछले कुछ दिनों में आपने मुझे एक टन की मदद की है! –

0

कुंजीपटल, कीडाउन और कीइवेंट हैंडलर एंटर/बैकस्पेस/टैब कुंजी को मारते समय आग नहीं लगाना।
इन महत्वपूर्ण प्रेस को फंसाने के लिए, आपको KeyUp ईवेंट को संभालना होगा।
फिर आप KeyEventArgs.KeyCode

0

का मूल्य जाँच कर सकते हैं के रूप में डैनियल ने कहा कि आप 'ActiveTextAreaControl.TextArea' ईवेंट का उपयोग पर कब्जा करने, दर्ज करें, अंतरिक्ष की तरह चाबियाँ, और युग्म आप की तरह निम्नलिखित जहां im पकड़ने एक कोड का उपयोग Ctrl + अंतरिक्ष संयोजन:

public frmConexon() 
    { 
     InitializeComponent(); 
     this.txtEditor.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(TextArea_KeyUp); 
    } 

    void TextArea_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Space && e.Control) 
     { 
      TextArea S = (TextArea)sender; 
      MessageBox.Show(string.Format("CTRL + Spacio ({0})", S.Caret.ScreenPosition.ToString())); 
     } 
    } 

इस उदाहरण im में भी, कैरट की स्क्रीन निर्देशांक पुन: प्राप्त करने cuz मैं वहाँ एक पॉपअप विंडो दिखाना चाहते हैं।