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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage