Me.KeyDown funktioniert nicht

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Me.KeyDown funktioniert nicht

    Hallo,

    in meinem Programm funktioniert das KeyDown Event in Textboxen etc., aber nicht selbst in der Form. Hier mal mein Code:

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.Up
    4. Player.Top -= 1
    5. Case Keys.Down
    6. Player.Top += 1
    7. Case Keys.Left
    8. Player.Left -= 1
    9. Case Keys.Right
    10. Player.Left += 1
    11. End Select
    12. End Sub


    Was für Gründe kann dsa haben?

    €: Was ist das eigentlich mit dem VB-Tag? Der funktioniert gar nicht richtig

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.Up
    4. MsgBox("Up")
    5. Case Keys.Down
    6. MsgBox("Down")
    7. End Select
    8. End Sub


    Klappt bei mir wunderbar..


    Grüsse
    Pascal

    PascalN schrieb:

    Klappt bei mir wunderbar..

    Platziere mal noch 2 Buttons auf der Form, dann klappts nicht mehr.

    Die Buttons fangen nämlich u.a. die Nachrichten für die Pfeiltasten ab (das System sendet nur an die Buttons, nicht an die Form), sodass das KeyDown-Event der Form nicht ausgelöst wird. Abhilfe schafft da entweder ein zusätzlicher MessageFilter oder eine abgeleitete Button-Klasse, die IsInputKey für die Pfeiltasten überschreibt und True zurückgibt, falls diese gedrückt werden. Es ist auch möglich, das PreviewKeyDown-Ereignis der Buttons zu behandeln und das Ereignis an den Form-Eventhandler weiterzuleiten (einfachste Methode).

    Beispiele:
    abgeleitete Klasse und PreviewKeyDown-Event
    MessageFilter

    Edit: kleines Codebeispiel:

    VB.NET-Quellcode

    1. Private Sub Buttons_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles Button1.PreviewKeyDown, Button2.PreviewKeyDown
    2. Form1_KeyDown(sender, New KeyEventArgs(e.KeyData))
    3. End Sub
    Gruß
    hal2000