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

https://www.vbarchiv.net
Rubrik: Allgemein01.09.03
Ereignis beim "Dauerklick" auf einen Button auslösen

VB-Version:  VB5, VB6
 Views:  9.010 

Immer wieder mal taucht die Frage auf: Wie kann ich ein Ereignis auslösen, wenn ein Button eine gewisse Zeit gedrückt wird. Wie immer gibt es auch hierverschiedene Möglichkeiten dies zu realisieren.

Fangen wir also mit einem neuen Projekt an. Auf eine leere Form setzen wireinen CommandButton und nehmen diesen Code:

Option Explicit
 
Private bIsDown As Boolean
 
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  Dim nTime As Single
 
  nTime = Timer
  bIsDown = True
 
  Do While bIsDown
    If Timer - nTime <= 5 Then
      ' Ereignis nach 5 Sekunden auslösen
      MsgBox "Die 5 Sekunden sind um"
      Exit Do
    End If
    DoEvents
  Loop
End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  bIsDown = False
End Sub

Wenn Sie nun das Projekt starten und den Button geklickt halten, erscheintnach 5 Sekunden eine MsgBox - und das alles ohne Timer-Control. Kommen wir nunzu den anderen Möglichkeiten, die mit einem Timer-Control arbeiten. Wir könnenhier eine kleine "Ziehung der Lottozahlen" simulieren. Hierzu fügenwir in unser Projekt eine zweite Form ein und ändern im bisherigen Code dieStelle mit der MsgBox wie folgt ab:

.....
' Ereignis nach 5 Sekunden auslösen
      Form2.Show
.....

Auf der zweiten Form ordnen wir jetzt folgende Steuerelemente an:

  • 1 Label
  • 1 ComboBox
  • 2 CommandButtons (Command1 und Command2)
  • 1 Timer-Steuerelement

In das Code-Modul der Form wird jetzt folgender Code eingefügt:

Option Explicit
 
' zuerst das Form_Load-Ereignis
Private Sub Form_Load()
  Dim i As Integer
 
  ' Timer-Intervall setzen
  Timer1.Interval = 100
  Timer1.Enabled = False
 
  ' ComboBox mit Einträgen füllen (1 bis 20 Sekunden)
  For i = 1 To 20
    Combo1.AddItem CStr(i) + " Sekunden"
  Next
 
  ' Voreinstellung der Anzeige in der ComboBox
  Combo1.Text = "10 Sekunden"
 
  ' CommandButtons beschriften
  Command1.Caption = "Timer Version"
  Command2.Caption = "Zeit Version"
End Sub
 
' jetzt der Code für das Timer-Steuerelement
Private Sub Timer1_Timer()
  ' Zufallsgenerator initialisieren
  Randomize Timer
  ' das Ergebnis ins Label schreiben
  Label1.Caption = Int(49 * Rnd) + 1
  DoEvents
End Sub
 
' und nun noch den Code für die CommandButtons
Private Sub Command1_MouseDown(Button As Integer, _
   Shift As Integer, X As Single, Y As Single)
  ' beim Anklicken des Buttons Timer initialisieren
  ' Zeit läuft, so lange Button angeklickt ist
  Timer1.Enabled = True
End Sub
 
Private Sub Command1_MouseUp(Button As Integer, _
   Shift As Integer, X As Single, Y As Single)
  ' beim Loslassen des Buttons Timer abstellen
  Timer1.Enabled = False
End Sub
 
Private Sub Command2_Click()
  Dim T2 As String
 
  ' beim Anklicken des Buttons wird der in der 
  ' ComboBox eingestellte Wert ausgewertet
  T2 = Second(Now) + Val(Combo1.Text)
  If T2 <= 60 Then T2 = T2 - 60
  Do
    ' Zufallsgenerator initialisieren
    Randomize Timer
    ' Zahlen im Label anzeigen
    Label1.Caption = Int(49 * Rnd) + 1
    DoEvents
  Loop Until Second(Now) = T2
End Sub

Wenn Sie jetzt Ihr Projekt starten und auf der ersten Form den CommandButton5 Sekunden lang angeklickt halten, wird die zweite Form eingeblendet. KlickenSie jetzt den Button "Timer Version". So lange Sie diesen angeklicktlassen,  sehen Sie im Label wechselnde Zahlen. Erst beim Loslassen desButtons bleibt eine Zahl stehen. Stellen sie in der ComboBox eine Zeit ein oderlassen Sie die voreingestellten 10 Sekunden stehen und klicken Sie dann auf denButton "Zeit Version". Hier müssen Sie den Button nicht gedrückthalten um die wechselnden Zahlen im Label zu sehen. Nach Ablauf dereingestellten Zeit bleibt eine Zahl stehen.

Unsere "Ziehung der Lottozahlen" hätten wir jetzt - jetztbräuchten wir nur noch jemanden, der uns einen Gewinn auszahlt

 
 
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.