vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Oberfläche · Menüs   |   VB-Versionen: VB5, VB604.12.07
Menü mit _KeyDown-Event

Das Menü in VB besitzt leider kein _KeyDown() -Event. Hier nun ein Script mit dem Sie diesen "Fehler" ausbügeln können.

Autor:   Jürgen FienauBewertung:  Views:  9.467 
computer.net-berlin.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Das Menü in VB besitzt leider kein _KeyDown() -Event. Wie kann man aber nach Ausklappen eines Menüs bspw. die Shift-Taste auswerten?

Nachfolgend eine Möglichkeit, die zeigt, wie's geht.

Benötigt wird hierzu ein Timer-Control, in dem die Shift- und Strg-Tasten über die API-Funktion GetAsyncKeyState abgefragt und in einer globalen Variable gespeichert werden. Der Timer wird immer dann gestartet, wenn ein Menüeintrag in der obersten Ebene (Menüleiste) angeklickt wurde.

Option Explicit
 
' benötigte API-Deklarationen
Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
  ByVal nVirtKey As Long) As Integer
 
Dim bShift As Boolean
Dim bStrg As Boolean
Private Sub MenuFile_Click()
  ' Timer starten
  tmrHotKey.Interval = 10
  tmrHotKey.Enabled = True
End Sub
Private Sub tmrHotKey_Timer()
  bShift = False
  bStrg = False
 
  ' Prüfen, ob Shift-Taste gedrückt
  If GetAsyncKeyState(vbKeyShift) And 1 = 1 Then bShift = True 
 
  ' Prüfen, ob Strg-Taste gedrückt
  If GetAsyncKeyState(vbKeyControl) And 1 = 1 Then bStrg = True
End Sub

Im Click-Event des jeweiligen Eintrags des Menüs können Sie dann den Status der Shift und Strg-Taste abfragen:

Private Sub mnuFileNew_Click()
  ' Wichtig! Timer wieder ausschalten
  tmrHotKey.Enabled = False
 
  If bShift Then ...
  If bStrg Then ...
 
  ...
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.