2009-10-22 12 views
6

मैं पहले से ही प्रपत्र गुण में सच करने के लिएKeyPreviewसेट हैकीडाउन घटना .NET WinForms के साथ फायरिंग नहीं है?

मैं एक छोटे से कार्यक्रम पर काम कर रहा हूँ, और मैं एक समस्या यह लगता है जहां कि उस पर नियंत्रण के कुछ अंदर groupboxes हैं हो रही है जब मैं किसी भी तीर कुंजी को दबाता हूं और रिलीज़ करता हूं, तो केवल कुंजीपॉल ईवेंट को दबाकर कुंजीडाउन ईवेंट को मेरे फॉर्म पर ट्रिगर नहीं करता है। क्या मेरे कोड में कुछ गड़बड़ है जो इसका कारण बन सकती है?

विशेष रूप से, मैंने फॉर्म पर कीप्रेव्यू को सक्षम किया है, और दोनों subroutines में e.SuppressKeyPress = True पर ब्रेकपॉइंट्स सेट किया है, और केवल frmMain_KeyUp के लिए ब्रेकपॉइंट हिट करता है।

मैंने दो ग्रुपबॉक्स कार्यक्रमों में जोड़ा जो उम्मीद करते हैं कि इस मुद्दे को कम कर सकते हैं, लेकिन ऐसी कोई किस्मत नहीं है। हालांकि, मेरे पास उस प्रपत्र पर एक कस्टम नियंत्रण है जिसे विशेष रूप से इन कीप्रेसों को अनदेखा करने के लिए कोड किया गया है, और कोड उस पर अपेक्षित काम करता है।

Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown, GroupBox1.KeyDown, GroupBox2.KeyDown 
     e.SuppressKeyPress = True 
     Select Case e.KeyCode 
      Case Keys.Left 
       ScrollDir = ScrollDir Or 1 
      Case Keys.Right 
       ScrollDir = ScrollDir Or 2 
      Case Keys.Down 
       ScrollDir = ScrollDir Or 4 
      Case Keys.Up 
       ScrollDir = ScrollDir Or 8 
      Case Else 
       e.SuppressKeyPress = False 
     End Select 
     tScroll.Enabled = True 
     tScroll_Tick(Nothing, Nothing) 
    End Sub 

    Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp, GroupBox1.KeyUp, GroupBox2.KeyUp 

     e.SuppressKeyPress = True 
     Select Case e.KeyCode 
      Case Keys.Left 
       ScrollDir = ScrollDir And (Not 1) 
      Case Keys.Right 
       ScrollDir = ScrollDir And (Not 2) 
      Case Keys.Down 
       ScrollDir = ScrollDir And (Not 4) 
      Case Keys.Up 
       ScrollDir = ScrollDir And (Not 8) 
      Case Else 
       e.SuppressKeyPress = False 
     End Select 
     If ScrollDir = 0 Then tScroll.Enabled = False 
    End Sub 

उपयोगकर्ता नियंत्रण कि keypresses "पर ध्यान नहीं देता" में कोड इस तरह है:

Private Sub TileDropDown_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
     If e.KeyValue = 40 OrElse e.KeyValue = 38 OrElse e.KeyValue = 39 OrElse e.KeyValue = 37 Then 

      e.SuppressKeyPress = True 
     End If 
    End Sub 
+0

नियंत्रण से कोड है कि यह ध्यान नहीं देता और देखें कि क्या वह 'में e.SuppressKeyPress = TRUE' uncommented के साथ कम से कम एक बार – curtisk

+0

आग में एक ब्रेकपाइंट सेट frmMain KeyDown हैंडलर, TileDropDown_KeyDown subroutine कभी नहीं कहा जाता है। इसके साथ टिप्पणी की, हैंडलर * * कहा जाता है। – Sukasa

उत्तर

8

keydown घटना में तीर कुंजी अवरोधन कुछ नियंत्रण है, लेकिन KeyUp घटना में नहीं। एक समाधान ProcessCmdKey नियंत्रण वर्ग निकाले जाते हैं और ओवरराइड करने के लिए है:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keydata As Keys) As Boolean 

If keydata = Keys.Right Or keydata = Keys.Left Or keydata = Keys.Up Or keydata = Keys.Down Then 
    OnKeyDown(New KeyEventArgs(keydata)) 
    ProcessCmdKey = True 
Else 
    ProcessCmdKey = MyBase.ProcessCmdKey(msg, keydata) 
    End If 
End Function 
+0

यह पूरी तरह से काम किया, धन्यवाद! – Sukasa

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