ToolStripMenu und KeyDown-Event

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    ToolStripMenu und KeyDown-Event

    Hallöle ihr da! ^^

    In vielen Controls (Button, TExtBox, usw.) habe ich das Ereignis KeyDown, KeyUp und KeyPress.
    Im ToolStripMenu ist dieses nicht vorhanden.

    Deswegen dachte ich mir, dass ich eine globale Variable vom Typ Boolean definiere, welche bei einem KeyDown und KeyUp Ereignis von (in diesem Falle) Form1 jewels zwischen True und False wechselt.

    Leider klappt das nicht so, wie ich mir das dachte. Weder mit KeyCode, noch mit KeyData.
    Habe ich bei einem ToolStrip gar keine Möglichkeit, auf die Modifier zuzugreifen und dadurch mit einem Menu-Eintrag zwei verschiedene Situationen zu schaffen? (einmal mit gedrückter, einmal ohne gedrückter [Strg]-Taste)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim ctrl_pressed As Boolean
    3. Private Sub Test1ToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles Test1ToolStripMenuItem.Click
    4. If ctrl_pressed Then
    5. Label1.Text = "Test 1 +ctrl"
    6. Else
    7. Label1.Text = "Test 1 -ctrl"
    8. End If
    9. End Sub
    10. Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    11. If e.KeyData = Keys.Control Then
    12. ctrl_pressed = True
    13. End If
    14. End Sub
    15. Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    16. If e.KeyData = Keys.Control Then
    17. ctrl_pressed = False
    18. End If
    19. End Sub
    20. End Class

    hirnwunde schrieb:

    Leider klappt das nicht so, wie ich mir das dachte.
    Wie hast Du es Dir denn gedacht?
    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!

    RodFromGermany schrieb:

    Wie hast Du es Dir denn gedacht?

    hirnwunde schrieb:

    Deswegen dachte ich mir, dass ich eine globale Variable vom Typ Boolean definiere, welche bei einem KeyDown und KeyUp Ereignis von (in diesem Falle) Form1 jewels zwischen True und False wechselt.


    Also ... wenn ich in der Form bspw. [Shift] gedrückt halte, wird mittels KeyDown die Variable shift_pressed auf True gesetzt.
    Das KeyUp-Event würde dann diese wieder auf False setzen.
    Wenn Du im Click-Event lediglich wissen willst, ob die ControlTaste gedrückt ist, nimm lieber API.GetAsyncKeyState().

    VB.NET-Quellcode

    1. <DllImport("user32.dll")> _
    2. Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
    3. End Function

    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!