.net - What's the equivalent of PostMessage to self, for Windows Forms? -


मैं System.Windows.Forms.Control से प्राप्त एक कस्टम नियंत्रण लिख रहा हूं।

नियंत्रण Control.KeyDown घटना, कीस्ट्रोक्स को देखने के लिए उपयोग कर रहा है: मैं कुछ कीस्ट्रोक्स संभाल चाहिए (उदाहरण के लिए <कोड> & lt; Ctrl & gt; -K ) हॉटकी के रूप में है, जो कारण मुझे एक संवाद बॉक्स लॉन्च करने।

अगर मैं अपने से संवाद का शुभारंभ OnKeyDown ईवेंट हैंडलर, संवाद इससे पहले कि मैं सेट प्रदर्शित किया जाता है KeyEventArgs.SuppressKeyPress से true और वापस लौटें (और इसलिए मैं K keypress को दबाने में विफल रहा हूं)। इसके बजाय, मैं onKeyDown ईवेंट हैंडलर से वापस जाना चाहता हूं, और बाद में संवाद लॉन्च करना चाहता हूं ऐसा करने के लिए, के बाद मैं से लौटने OnKeyDown ईवेंट हैंडलर मैं 'संवाद का शुभारंभ' घटना के कुछ प्रकार के साथ किसी भी तरह फिर से लागू किया जा करने के लिए, की जरूरत है।

Win32 पर, मैं कर सकता अपने आप को एक पंजीकृत विंडो संदेश भेजने के लिए PostMessage API का उपयोग करके इस घटना को उत्पन्न करें: मेरे संदेश कतार में किसी भी पिछले संदेश के बाद ही यह संदेश प्राप्त होगा, और इसे मेरे संवाद को लॉन्च करने के लिए सिग्नल के रूप में प्रयोग करेंगे । यहाँ हालांकि मैं उपयोग नहीं कर सकते PostMessage समारोह (और न ही WndProc विधि) क्योंकि मैं सख्ती से उपयोग करना चाहते हैं प्रबंधित API (जरूरत के बिना SecurityPermissionFlag :: UnmanagedCode )

तो क्या कामयाब बराबर है, एक धागा (मेरे यूआई धागा) एक अतुल्यकालिक कॉलबैक का समय निर्धारित करने के लिए किया जाएगा:। शायद किसी तरह के एक टाइमर? किसी तरह का आत्म - आमंत्रित ?

मेरा पहला विचार था "सेट संवाद खोलने से पहले <सर> सरपर की प्रेस प्रॉपर्टी, लेकिन वह वास्तव में आपके प्रश्न का उत्तर नहीं दे रही है। यदि संवाद को खोलने से पहले आपको वास्तव में ईवेंट हैंडलर से वापस जाने की आवश्यकता है, तो BeginInvoke विधि पर एक नज़र डालें।

आप ऐसा कुछ कर सकते हैं:

  ... This.BeginInvoke (नया InvokeDelegate (showDlg)); KeyEventArgs.SuppressKeyPress = सच; ... सार्वजनिक शून्य दिखाने डीएलजी () {// बनाओ और संवाद यहाँ दिखाएं}  

Comments