मेरे पास कई नियंत्रणों वाला एक फॉर्म है। मैं किसी भी नियंत्रण घटना के बावजूद keydown घटना पर एक विशिष्ट सब चलाने के लिए चाहता हूँ। मेरा मतलब है कि यदि उपयोगकर्ता फॉर्म पर कहीं भी Ctrl + S दबाता है तो यह सबराउटिन निष्पादित करता है।vb.net पूरे फॉर्म पर keydown घटना
10
A
उत्तर
17
आप सही पर फार्म पर KeyPreview गुण सेट और वहाँ keydown घटना
इस संपत्ति को सही पर सेट किया जाता है संभाल चाहिए, प्रपत्र सभी कुंजी दबाने, KeyDown, और KeyUp घटनाओं प्राप्त होगा। फॉर्म के ईवेंट हैंडलर के पास कुंजीस्ट्रोक को संसाधित करने के बाद, कीस्ट्रोक को पर फ़ोकस के साथ नियंत्रित किया जाता है। .......... कुंजीपटल घटनाओं को केवल फॉर्म स्तर पर संभालने के लिए और नियंत्रण को कीबोर्ड ईवेंट प्राप्त करने की अनुमति नहीं देते हैं, तो KeyPressEventArgs.Handled प्रॉपर्टी को अपने फ़ॉर्म के कीप्रेस ईवेंट हैंडलर में सत्य पर सेट करें।
तो, उदाहरण के लिए, नियंत्रण + एस कुंजी संयोजन को संभालने के लिए आप इस घटना हैंडलर को कुंजीडाउन ईवेंट के रूप में लिख सकते हैं।
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
If e.Control AndAlso e.KeyCode = Keys.S then
' Call your sub method here .....
YourSubToCall()
' then prevent the key to reach the current control
e.Handled = False
End If
End Sub
1
मैंने इस कोड का उपयोग पहले मेरे रूपों में किया है और ऐसा लगता है कि यह बहुत अच्छा काम करता है।
Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean
If m.Msg = &H100 Then 'WM_KEYDOWN
Dim key As Keys = m.WParam
If key = Keys.S And My.Computer.Keyboard.CtrlKeyDown Then
'DO stuff
Return True
End If
End If
Return MyBase.ProcessKeyPreview(m)
End Function
धन्यवाद स्टीव ... यह बहुत उपयोगी है – Malik