2012-12-05 21 views
10

मेरे पास कई नियंत्रणों वाला एक फॉर्म है। मैं किसी भी नियंत्रण घटना के बावजूद keydown घटना पर एक विशिष्ट सब चलाने के लिए चाहता हूँ। मेरा मतलब है कि यदि उपयोगकर्ता फॉर्म पर कहीं भी Ctrl + S दबाता है तो यह सबराउटिन निष्पादित करता है।vb.net पूरे फॉर्म पर keydown घटना

उत्तर

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 
+0

धन्यवाद स्टीव ... यह बहुत उपयोगी है – Malik

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