Focus von Buttons erkennen

  • VB.NET

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

    Focus von Buttons erkennen

    Hallo liebes Forum,

    beschäftige mich seit kurzem mit VB 2010 Express und bin mit meinen ersten Ergebnissen durchaus zufrieden.
    Ich bin gerade dabei ein Launcher Programm für mich zu schreiben. Dabei gibt es ein Menü, ähnlich zum Windows 8 Startscreen.
    Zur Navigation will ich den unten stehenden Code benutzen. Um aber beim jeweiligen Tastendruck auf den richtigen nächsten Button zu springen muss ich natürlich wissen welcher Button derzeit makiert, also im focus ist.
    Hab diverse Ansätze mit .selected und .focus gesehen. Konnte aber keinen zum laufen bekommen. Gibt es irgendwo ein Tutorial oder einen Programmschnipsel der mit helfen kann.

    Den Code verwende ich zum abfragen des Buttonwechsels

    Visual Basic-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    2. Dim bHandled As Boolean = False
    3. Select Case e.KeyCode
    4. Case Keys.Right
    5. 'do stuff
    6. e.Handled = True
    7. Case Keys.Left
    8. e.Handled = True
    9. Case Keys.Up
    10. 'do more stuff
    11. e.Handled = True
    12. Case Keys.Down
    13. 'do more stuff
    14. e.Handled = True
    15. End Select
    16. End Sub


    edit:

    Oder die ganze Frage als Kurzfassung:

    Ich versuche

    Visual Basic-Quellcode

    1. If Button2.Focused Then
    2. ' Do IT
    3. End If


    diesen Code mit dem obrigen zu verknüpfen sodass, je nach ausgewählten Button und ausgewählten Tastendruck etwas anderes passiert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chogger“ ()

    Willkommen im Forum. :thumbup:

    chogger schrieb:

    den richtigen nächsten Button
    Fang an und gib den Button die korrekte Tabulator-Reihenfolge:
    Studio-Menü View -> TabOrder, da klickst Du auf Deine Contrrols in der eihenfolge, in der sie bei Betätigung der Tab-Taste angesprungen werden sollen:
    vorher: nachher:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    chogger schrieb:

    leider nichts.
    Vielleicht dieser:
    Form mit 9 Button und einem Label
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Enter(sender As Object, e As EventArgs) Handles Button1.Enter
    3. Label1.Text = "Button1"
    4. End Sub
    5. Private Sub Button2_Enter(sender As Object, e As EventArgs) Handles Button2.Enter
    6. Label1.Text = "Button2"
    7. End Sub
    8. Private Sub Button3_Enter(sender As Object, e As EventArgs) Handles Button3.Enter
    9. Label1.Text = "Button3"
    10. End Sub
    11. Private Sub Button4_Enter(sender As Object, e As EventArgs) Handles Button4.Enter
    12. Label1.Text = "Button4"
    13. End Sub
    14. Private Sub Button5_Enter(sender As Object, e As EventArgs) Handles Button5.Enter
    15. Label1.Text = "Button5"
    16. End Sub
    17. Private Sub Button6_Enter(sender As Object, e As EventArgs) Handles Button6.Enter
    18. Label1.Text = "Button6"
    19. End Sub
    20. Private Sub Button7_Enter(sender As Object, e As EventArgs) Handles Button7.Enter
    21. Label1.Text = "Button7"
    22. End Sub
    23. Private Sub Button8_Enter(sender As Object, e As EventArgs) Handles Button8.Enter
    24. Label1.Text = "Button8"
    25. End Sub
    26. Private Sub Button9_Enter(sender As Object, e As EventArgs) Handles Button9.Enter
    27. Label1.Text = "Button9"
    28. End Sub
    29. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für den Ansatz, wäre ich so wohl nicht so schnell drauf gekommen.
    Ich laufe aber jetzt voll in diese Problematik:

    Vatter schrieb:

    Die Pfeiltasten lösen das Keydown der Form immer dann nicht aus, wenn andere Steuerelemente den Focus haben. Sie dienen nämlich dem wWeiterschalten de Focus zum nächsten Steuerelement. Es gibt aber eine Möglichkeit, das zu umgehen (Is auch bei MSDN…


    Und die gängigen Workarounds
    ( z.B.

    VB.NET-Quellcode

    1. Protected Overrides Function IsInputKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
    2. Debug.WriteLine("IsInputKey")
    3. Select Case keyData
    4. Case Keys.Up, Keys.Down, Keys.Left, Keys.Right
    5. Return True ' = True: Normale Tasten
    6. End Select
    7. End Function

    )


    sind für mich Nutzlos, da ich ja im Enddefekt möchte, dass die Buttons den Focus bekommen. Sobald der erste Button einen Focus hat funktioniert es wieder nicht.Auf dein Bild bezogen, es soll mit Keys.Down von Button5 zu Button8 gesprungen werden. Von Button8 dann zu Button2...

    Ich bin ein wenig verwirrt... Ist mein Ansatz um dieses Problem zu lösen komplett falsch ?! Oh Mann

    chogger schrieb:

    es soll mit Keys.Down von Button5 zu Button8 gesprungen werden.
    Mit meinem Code bekommst Du die Information, welches Control den Fokus hat. Nun musst Du nur noch Deine und meine Information zusammensetzen und dann per Tabelle wissen, welcher Button der nächste ist, und den kannst Du mit ButtonX.Focus() aktivieren. Allerdings musst Du das halt selbst programmieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!