Form fokusieren key listener

  • Sonstige

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FireEmerald.

    Form fokusieren key listener

    Moinsen,

    hab heute mal ein wenig mit dem Akionlistener herumprobiert. Hier folgender Code:

    Visual Basic-Quellcode

    1. Public Class KeyDown
    2. Dim form1 As New Form
    3. Dim links As Boolean
    4. Dim rechts As Boolean
    5. Dim oben As Boolean
    6. Dim unten As Boolean
    7. Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    8. 'RECHTS BEWEGEN
    9. If e.KeyValue = System.Windows.Forms.Keys.Right Then
    10. rechts = True
    11. 'LINKS BEWEGEN
    12. ElseIf e.KeyValue = System.Windows.Forms.Keys.Left Then
    13. links = True
    14. ElseIf e.KeyValue = System.Windows.Forms.Keys.Up Then
    15. oben = True
    16. ElseIf e.KeyValue = System.Windows.Forms.Keys.Down Then
    17. unten = True
    18. End If
    19. End Sub
    20. Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    21. 'SOBALD DIE TASTE LOSGELASSENW IRD RECHTS BEWEGEN STOP
    22. If e.KeyValue = System.Windows.Forms.Keys.Right Then
    23. rechts = False
    24. 'LINKS BEWEGEN STOP
    25. ElseIf e.KeyValue = System.Windows.Forms.Keys.Left Then
    26. links = False
    27. ElseIf e.KeyValue = System.Windows.Forms.Keys.Up Then
    28. oben = False
    29. ElseIf e.KeyValue = System.Windows.Forms.Keys.Down Then
    30. unten = False
    31. End If
    32. End Sub
    33. Private Sub KeyDown_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    34. form1.Show()
    35. form1.Focus()
    36. timer.Start()
    37. End Sub
    38. Private Sub timer_Tick(sender As Object, e As EventArgs) Handles timer.Tick
    39. If oben = True Then
    40. pnlQuader.Location = New Point(pnlQuader.Location.X, pnlQuader.Location.Y - 10)
    41. ElseIf links = True Then
    42. pnlQuader.Location = New Point(pnlQuader.Location.X - 10, pnlQuader.Location.Y)
    43. ElseIf rechts = True Then
    44. pnlQuader.Location = New Point(pnlQuader.Location.X + 10, pnlQuader.Location.Y)
    45. ElseIf unten = True Then
    46. pnlQuader.Location = New Point(pnlQuader.Location.X, pnlQuader.Location.Y + 10)
    47. End If
    48. End Sub


    Hinzufgeüft muss noch ein Panel mit den Namen pnlQuader. Sobald man das Prog startet, kann man mit den Pfeiltasten das Ding steuern.
    Leider funktioniert das ganze nicht mehr, sobald ein Objekt z.b. Button oder Textbox in dem Feld enthalten ist.
    Ich bin so weit gekommen, dass es zu 90% an dem Fokus liegt.
    Wie lege ich den Fokus wieder auf die Form?

    Lg
    denni

    danielwonst schrieb:


    Leider funktioniert das ganze nicht mehr, sobald ein Objekt z.b. Button oder Textbox in dem Feld enthalten ist.

    Wie lege ich den Fokus wieder auf die Form?

    Dein Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles nur Me.KeyDown. Me ist in deinem Fall wohl eine WindowsForm. Wenn sich nun aber der Fokus ändert, werden die Events, wie KeyDown nicht mehr von der WinForm verarbeitet, sondern von dem aktuell aktiven Objekt auf der Windows Form.

    Wenn ich es richtig in Erinnerung hab gibt es in den Propertys deiner WinForm einen Punkt mit dem du die Events aller Objekte die sich in der Form befinden an die Form weiterleiten lassen kannst. Somit würde, auch wenn du gerade eine Textbox innerhalb der Form aktiv hast, das KeyDown Event der Form getriggert werden.

    Gruß, FireEmerald