Pfeiltasten werden von OnKeyDown nicht erkannt

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Firedroide.

    Pfeiltasten werden von OnKeyDown nicht erkannt

    Hallo zusammen

    Ich habe ein kleines Problem mit OnKeyDown. Irgendwie werden dort alle Tasten erkannt, nur nicht die Pfeiltasten.

    VB.NET-Quellcode

    1. Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
    2. If e.KeyData = Keys.Right Or e.KeyData = Keys.D Then
    3. RightDown = True
    4. ElseIf e.KeyData = Keys.Left Or e.KeyData = Keys.A Then
    5. LeftDown = True
    6. End If
    7. End Sub


    Bei OnKeyUp funktioniert es aber, obwohl es eigentlich das genau gleiche ist.


    Vielen Dank im Voraus für eure Hilfe.

    Firedroide
    Vielleicht machst Du Dir einen Haltepunkt in die KeyDown-Routine und siehst Dir mal das Argument e an.
    Bei mir sieht das nach Betätigung der LINKS-Taste so aus:
    Bilder
    • KeyDown.jpg

      55,82 kB, 672×458, 175 mal angesehen
    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!
    hmm, Code ist richtig also sollte es daran wohl weniger liegen, eher wo und wie es verwendet wird.

    Für welches Control verwendest Du den Override, für eine Form ? Falls ja hast Du KeyPreview=True gesetzt ?

    Und warum ein Override statt eines Handles Statements ?
    Also, ich habe jetzt einmal etwas mit den Haltemarken herumgespielt und festgestellt, dass das Sub gar nicht ausgeführt wird, wenn man die Pfeiltasten drückt.

    Hi,

    ersetzte mal dein Or durch ein OrElse - ich glaube nicht, dass die Boolesns mit einem Bitweise-Oder verknüpft werden sollen...
    Und warum überschreibst du eigentlich die OnKeyDown-Methode, wo es doch das KeyDown-Event gibt?

    MfG
    Kommt ja nicht drauf an, bei Or werden einfach beide Ausdrücke ausgewertet, wenn der erste True ist.

    hmm, Code ist richtig also sollte es daran wohl weniger liegen, eher wo und wie es verwendet wird.

    Für welches Control verwendest Du den Override, für eine Form ? Falls ja hast Du KeyPreview=True gesetzt ?

    Und warum ein Override statt eines Handles Statements ?

    Nein, es hat nichts mit einer Form zu tun, ich mache im Moment eine eigene Control (ein Arkanoid-Spiel), und da brauche ich die Pfeiltasten direkt in der Klasse der Spiel-Control.

    Das mit dem Overrides ist, da es diese Standard-Subs ja schon hat, und die (soweit ich weiss) genau für diesen Zweck da sind.
    Ich habe es aber auch mit einer ganz normalen Sub und einem "Handles" probiert, aber der Code wird genau gleich nicht ausgeführt.

    MfG,
    Firedroide

    Bluespide schrieb:

    villeicht ligts an deiner tastatur :P
    wenn ich den code von oben nehme funktioniert es mit a, d, links und rechts.

    hmm, auch ein UserControl muss ja Focus haben damit das KeyDown Ereignis ausgelöst wird. Wenn Du sagst die Sub würde generell nicht aufgerufen , so würde ich evtl dort mal suchen.

    In Deiner Form wird das Ereignis wohl nicht ankommen, ob KeyPreview oder nicht, da Du die überschriebene Sub mybase.OnKeydown ja nicht aufrufst.

    Kangaroo schrieb:

    Bluespide schrieb:

    villeicht ligts an deiner tastatur :P
    wenn ich den code von oben nehme funktioniert es mit a, d, links und rechts.

    hmm, auch ein UserControl muss ja Focus haben damit das KeyDown Ereignis ausgelöst wird. Wenn Du sagst die Sub würde generell nicht aufgerufen , so würde ich evtl dort mal suchen.

    In Deiner Form wird das Ereignis wohl nicht ankommen, ob KeyPreview oder nicht, da Du die überschriebene Sub mybase.OnKeydown ja nicht aufrufst.



    Also, an meiner Tastatur liegts ganz sicher nicht, die funktioniert. *NACH-RECHTS- und NACH-LINKS-Drück*

    Fokus hat das Steuerelement auch.

    Das Sub wird übrigens nur nicht aufgerufen, wenn NACH-RECHTS oder NACH-LINKS gedrückt wird, sonst funktioniert es.


    MfG,
    Firedroide