2010-03-17 10 views
11

मैं Windows फॉर्म अनुप्रयोग में टैब कुंजी को कैप्चर करने का प्रयास कर रहा हूं और इसे दबाए जाने पर एक कस्टम कार्रवाई करें।WinForms एप्लिकेशन में टैब्स कुंजी कैप्चर कैसे करें?

मैं कई listviews और बटन के साथ एक फार्म है, मैं सच करने के लिए फार्म के KeyPreview संपत्ति निर्धारित किया है और जब मैं टैब के अलावा कोई अन्य कुंजी दबाते हैं, मेरी KeyDown ईवेंट हैंडलर कहा जाता हो जाता है।

लेकिन यह टैब कुंजी के साथ सच नहीं है - मुझे WndProc में भी WM_KEYDOWN संदेश प्राप्त नहीं होता है।

क्या मुझे अपने फॉर्म के अंदर प्रत्येक नियंत्रण सेट करने की आवश्यकता है - इसकी टैबस्टॉप संपत्ति - झूठी है? उस से एक और अधिक सुरुचिपूर्ण तरीका होना चाहिए।

धन्यवाद।

उत्तर

9

this आपकी मदद करेगा?

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean 
    Dim keyPressed As Keys = CType(msg.WParam.ToInt32(), Keys) 

    Select Case keyPressed 
    Case Keys.Right msgbox("Right Arrow Key Caught") 
    Case Keys.Left msgbox("LeftArrow Key Caught") 
    Case Keys.Up msgbox("Up Arrow Key Caught") 
    Case Keys.Down msgbox("Down Arrow Key Caught") 
    Case Else Return MyBase.ProcessCmdKey(msg, keyData) 
    End Select 
End Function 
+0

हाँ! धन्यवाद। तो पूरा होने के लिए, मुझे फॉर्म की प्रक्रिया CmdKey ईवेंट ओवरराइड करना था और जांचना था कि (keyData और Keys.Tab) == Keys.Tab। – Axarydax

+1

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

28

यह सी # लिंक ऊपर दिए गए VB कोड के समान कोड है ...

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Tab) 
     { 
      //your code 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 

आशा इस मदद करता है ...

+0

निश्चित रूप से मेरी मदद की। जिस भाषा को प्रश्न के तहत टैग किया गया था, उसके लिए कोड प्रदान करने के लिए एक उत्थान। – Logarr

+0

@Logarr: खुशी हुई यह मदद मिली :-) – Ram

+0

स्वीकार्य उत्तर pleeease के रूप में। – TechNyquist

5

आप उपयोग कर सकते हैं "PreviewKeyDown" घटना

+0

यह इतना आसान है। धन्यवाद! – nawfal

-1
Private Sub form1_KeyDown(....) Handles Me.KeyDown 
    If e.KeyCode = Keys.Enter Then 
     SendKeys.Send("{tab}") 
    End If 
End Sub 
+0

कि वास्तव में प्रश्न के साथ कुछ भी करने के लिए नहीं है - आप एंटर कुंजी को रोकते हैं और बाद में टैब भेजते हैं ... – Axarydax

संबंधित मुद्दे