Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 24.05.04 |
DblClick Event für den CommandButton Eine Klasse, mit der sich die Standard-CommandButtons von VB mit einem DblClick-Ereignis ausstatten lassen. | ||
Autor: Roland Wutzke | Bewertung: | Views: 12.992 |
www.vb-power.net | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Eins der wohl meist benutzten Controls in VB ist der CommandButton. Doch was ihm fehlt, ist ein DblClick-Ereignis. Hier haben die Entwickler von Microsoft gegeizt Ab sofort ist damit Schluss - wir verpassen dem Button einfach nachträglich dieses Ereignis.
Sicherlich könnten Sie jetzt sagen - ist ja kein Problem, ich prüfe einfach das Click Ereignis mit einem Timer. Eleganter und unabhängiger geht es aber mit einer Klasse.
Das Klassenmodul clsCmdDblClick:
Eigenschaften:
- ButtonToHandle: Übergeben wird der Button aus der aufrufenden Form
- DblClickTime: Optional, übergeben wird die Zeit in Millisekunden
Ereignis:
- DblClick: Wird bei einem Doppelklick ausgelöst
Die Klasse liest bei der Initialisierung automatisch die im System eingestellte Doppelklickzeit aus und weist sie der Eigenschaft DblClickTime als Default-Wert zu.
Starten Sie ein neues Projekt und legen Sie ein neues Klassenmodul an. Benennen Sie die Klasse clsCmdDblClick. Fügen Sie den nachfolgenden Code in das Codefenster der Klasse ein.
' ******************************************************** ' * ' * clsCmdDblClick - Klasse ' * ' * Stattet einen CommandButton mit einem DblClick ' * Ereignis aus. Die Klasse wird dabei automatisch ' * mit der im System eingestellten DblClickTime ' * eingestellt. ' * ' * Eigenschaften: ' * ButtonToHandle: Übergeben wird der Button aus ' * der aufrufenden Form. ' * DblClickTime: Optional, übergeben wird die ' * DblClickTime in mSek. ' * ' * Mai 2004 - www.vb-power.net und Roland Wutzke ' * ' ******************************************************** Option Explicit ' benötigte API Private Declare Function GetDoubleClickTime Lib "user32" () As Long ' KlassenVars Private WithEvents oButton As CommandButton Private oDblClickTime As Single ' Ereignis Public Event DblClick()
Private Sub Class_Initialize() ' Wir holen uns die DoubleClickTime ' aus dem System ;-) oDblClickTime = GetDoubleClickTime / 1000 End Sub Private Sub Class_Terminate() ' Klasse zerstören If Not oButton Is Nothing Then Set oButton = Nothing End If End Sub
Private Sub oButton_Click() Static DblClickLast As Single ' Prüfen, ob innerhalb der DblClickTime ' der CommandButton 2 mal gedrückt wurde. If Timer - DblClickLast < oDblClickTime Then ' DblClick Ereignis auslösen RaiseEvent DblClick End If ' Prüfzeit initialisieren DblClickLast = Timer End Sub
' Eigenschaften der Klasse Public Property Set ButtonToHandle(ByVal vData As CommandButton) Set oButton = vData End Property Public Property Let DblClickTime(ByVal vData As Long) oDblClickTime = vData / 1000 End Property
Nachfolgend ein Beispiel, wie Sie einen Button mit dem neuen Ereignis ausstatten können. Platzieren Sie auf der Form einen CommandButton (Command1) und fügen Sie den nachfolgenden Code in das Codefenster der Form ein:
Option Explicit ' Klasse mit Ereignis Private WithEvents MyButton As clsCmdDblClick
Private Sub Form_Load() ' Klasse instanzieren Set MyButton = New clsCmdDblClick ' Eigenschaften zuweisen With MyButton Set .ButtonToHandle = Command1 .DblClickTime = 500 ' optional End With End Sub
' Das Ereignis DblClick Private Sub MyButton_DblClick() MsgBox "Doppelklick" End Sub