KeyDown-Ereignis wird nicht mit .NET WinForms ausgelöst?
ich habe schon KeyPreview
In den Formulareigenschaften auf true gesetzt
Ich arbeite an einem kleinen Programm und habe ein Problem, bei dem es den Anschein hat, dass einige Steuerelemente in Gruppenfeldern das KeyDown-Ereignis in meinem Formular nicht auslösen, wenn ich eine Pfeiltaste drücke und loslasse, nur das KeyUp-Ereignis . Stimmt etwas mit meinem Code nicht?
Insbesondere habe ich KeyPreview im Formular aktiviert und Haltepunkte gesetzte.SuppressKeyPress = True
In beiden Unterroutinen trifft nur die für frmMain_KeyUp den Haltepunkt.
Ich fügte in den beiden GroupBox-Ereignissen hinzu, in der Hoffnung, dass dies das Problem lindern könnte, aber kein solches Glück. Ich habe jedoch ein benutzerdefiniertes Steuerelement in dem Formular, das speziell zum Ignorieren dieser Tastendrücke codiert ist, und der Code funktioniert wie erwartet darauf.
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
Der Code im Benutzersteuerelement, der Tastendrücke "ignoriert", lautet wie folgt:
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