KeyDown Ereignis mit Alt, Strg, oder Shift

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    KeyDown Ereignis mit Alt, Strg, oder Shift

    Hallo!

    Mein Problem:

    VB.NET-Quellcode

    1. Select Case e.KeyData
    2. Case Keys.E
    3. MsgBox("E wird gedrückt") 'Funktioniert
    4. Case Keys.Alt
    5. MsgBox("Alt") 'Funktioniert nicht!
    6. Case Keys.ControlKey
    7. MsgBox("ContolKey") ' Funktioniert auch nicht!
    8. End Select



    Wie mach ich das mit der KeyDown Abfrage von Control, Shift & Alt?

    Vielen Dank! :thumbsup:

    VB.NET-Quellcode

    1. If e.Alt AndAlso e.Shift AndAlso e.Control Then
    2. ' alle drei gedrückt
    3. End If
    4. Select Case True ' geht natürlich auch mit If-Abfragen
    5. Case Keys.Alt
    6. ' Alt gedrückt
    7. Case Keys.Shift
    8. ' Shift gedrückt
    9. Case Keys.Control
    10. ' Ctrl gedrückt
    11. End Select
    Danke für deine Antwort. Das meinte ich eigentlich gar nicht, wollte ich aber auch schon immer mal wissen. Meine eigentliches Problem ist, das die Abfrage mit If und Select Case nach Tasten wie "E", "T" und anderen Buchstaben geht, aber bei Shift, Alt und Control geht's eben nicht.

    Vielleicht liegt's an der Tastatur? Wenn ich "E" wird das Ereignis Keydown ausgelöst, genause wie wenn ich die Taste Strg drücke.

    Jedoch funktioniert das bei Strg nicht mit der Abfrage:

    Select Case e.KeyData
    Case Keys.Control
    MsgBox("ContolKey")
    End Select

    Da passiert einfach nichts!

    Nicht so wie bei den anderen Tasten...
    Ganz einfach:

    Würde e.KeyData auch Control, Shift und Alt zurückgeben, dann würde man z.B. bei einer Tastenkombination wie Ctrl + E entweder Ctrl oder E zurückbekommen, da eine Variable nicht zwei Werte auf einmal annehmen kann.
    Daher wurde das Ganze so gelöst, dass die drei Tasten in speziellen Propertys gespeichert werden.

    Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt. Falls du weitere Fragen hast, frag. :)

    iBasic schrieb:

    Da passiert einfach nichts!

    Du fragst halt auch die falschen Werte aus der Keys-Enumeration ab

    Versuch mal folgenden Code und drücke die entsprechenden Tasten:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. MessageBox.Show("key was pressed: " & e.KeyCode.ToString)
    3. End Sub

    Merkst Du was ?
    ich nehm immer folgenden TestCode, weil ich mir bei KeyCode und KeyData nie merken kann, was was ist:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyDown
    2. Debug.Print(String.Concat("KeyData: """, e.KeyData, """"))
    3. Debug.Print(String.Concat(", KeyCode: """, e.KeyCode, """"))
    4. End Sub
    Hi
    Das ist relativ einfach zu merken:
    KeyData enthält einfach alle Daten, also die, die den Modifiziererstatus und die Taste miteinander aufweisen, und KeyCode einfach den Code der gedrückten Taste. Keys.ControlKey, Keys.Menu und Keys.ShiftKey sind die Werte für die Tasten Control, Alt und Shift (also nicht in ihrer Modifiziererfunktion), da Control, Alt und Shift selbst halt Flags in der Enumeration sind, die bei Gedrückthalten mitgegeben werden (sieht man ja bei KeyData).

    Gruß
    ~blaze~