Rubrik: Allgemein | 01.09.03 |
Ereignis beim "Dauerklick" auf einen Button auslösen VB-Version: VB5, VB6 | ||
Views: 9.023 |
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