Pfeiltasten sollen nicht den Fokus ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Pfeiltasten sollen nicht den Fokus ändern

    Hallo zusammen,

    ich programmiere z.Z. eine Ansteuerung für Schrittmotoren. Diese Motoren (3 Stk.) sollen über Buttons und Pfeiltasten des Nummernbocks angesteuert werden.
    Ich habe also eine Form, auf der 6 Buttons sind. Jeder Button ist für eine Drehrichtung eines Motors. Die Buttons selber funktionieren, möchte ich jedoch jetzt die Pfeiltasten benutzen, tritt ein Problem auf.

    In der Form habe ich natürlich

    VB.NET-Quellcode

    1. KeyPreview = true
    gesetzt. Zusätzlich habe ich dafür gesorgt, dass die Pfeiltasten als normale "InputKeys" interpretiert werden, auch wenn Controlls auf der Form sind:

    VB.NET-Quellcode

    1. Protected Overrides Function IsInputKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
    2. Select Case keyData
    3. Case Keys.Up, Keys.Down, Keys.Left, Keys.Right
    4. Return True
    5. End Select
    6. End Function


    Das Verfahren der Motoren funktioniert dann mit folgendem Code:

    VB.NET-Quellcode

    1. Private Sub DemoForm_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.Right
    4. MB_Jog(0, 100)
    5. Case Keys.Left
    6. MB_Jog(0, 1000)
    7. Case Keys.Up
    8. MB_Jog(0, 0)
    9. End Select
    10. End Sub


    Leider wird jedoch die Pfeiltaste nach meiner Verarbeitung noch zusätzlich an die Form weiter geleitet, so dass sich beim Betätigen der Pfeiltaste auch immer der Fokus der Contolls in der Form ändert.
    Ganz schlecht ist dass z.B. bei der ScrollBar, die ich noch zur Einstellung der Geschwindigkeit auf der Form habe. Hier wird einfach der Wert mit den Pfeiltasten geändert.

    Gibt es eine Möglichkeit, dass die Pfeiltasten nach meiner Select Case Anweisung nicht mehr weiter geleitet werden, und die Form somit davon nicht mitbekommt?

    Schon mal vielen Dank für eventuelle Antworten.

    VG Christian

    DotNetler schrieb:

    nicht mehr weiter geleitet werden
    Gib den anderen Controls im Designer die Propertry TabStop = False.
    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 Tipp, das hat mit schon mal ein bisschen weiter gebracht.
    Wenn ich das Programm starte, funktioniert das Verfahren mit den Pfeiltasten nun ohne, dass der Fokus der Controlls geändert wird.
    Sobald ich aber einmal die Motoren über einen Button bewegt habe (Button hat nun Fokus), ändere ich wieder den Fokus mit den Pfeiltasten.
    So, ich habe das Problem nun umgangen, indem ich mich dafür entschieden habe, nicht die Pfeiltasten sondern die Nummern des Nummernblocks zu nehmen.
    Nun habe ich aber ein weiteres Problem. Ich muss (Kundenwunsch) mehrere Tasten gleichzeitig drücken können. Wenn ich nun die Taste (vom Nummernblock) 6,2 und 3 drücke, bekomme ich auch jeweils das KeyDown Event. Bei 6,2,5 kommt das Event für 5 nicht mehr. Es gibt noch ein paar andere Kombinationen, wo 3 Tasten funktionieren bzw. nicht funktionieren. Woran kann das liegen und wie kann man das beheben?

    DotNetler schrieb:

    mehrere Tasten gleichzeitig
    fragst Du ab mit GetAsyncKeyState().
    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!