Rubrik: Controls | VB-Versionen: VB2005, VB2008 | 03.12.09 |
Dauer-Aktion während Button-Click ausführen Dieser Tipp stellt zwei Varianten vor, wie man eine Dauer-Aktion ausführen kann, solange ein Button gedrückt wird. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.167 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Kürzlich wurde im Forum gefragt, wie man eine bestimmte Aktion ausführen, wenn man auf einen Button klickt. Das besondere daran: die Aktion so so lange ausgeführt werden, wie der Button gedrückt gehalten wird.
Variante 1:
Beim Klick auf den Button starten wir einen Timer, so dass die Aktion in einem fest vorgegebenen Intervall ausgeführt wird. Wird die Maustaste losgelassen, stoppen wir den Timer, so dass die Aktion autom. beendet wird.
Public Class Form1 Private WithEvents oTimer As Timer Private Counter As Long Private Sub Button1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown ' Timer starten If IsNothing(oTimer) Then oTimer = New Timer oTimer.Interval = 100 oTimer.Start() End Sub Private Sub Button1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp ' Timer stoppen oTimer.Stop() End Sub Private Sub oTimer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles oTimer.Tick ' Aktion ausführen ' hier Vartiable hochzählen Counter += 1 ' zum Test: Anzeige in der Titelzeile Me.Text = Counter End Sub End Class
Variante 2:
Hier wird die Aktion nicht über ein Timer ausgeführt, sondern innerhalb einer Endlosschleife:
Public Class Form1 Private bMouseDown As Boolean Private Counter As Long Private Sub Button1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown ' Aktion starten If Not bMouseDown Then bMouseDown = True Do While bMouseDown ' Aktion ausführen ' hier: Counter erhöhen Counter += 1 ' zum Test: Anzeige in der Titelzeile Me.Text = Counter ' ggf. kurz warten System.Threading.Thread.Sleep(100) ' Wichtig: damit man auf das MouseUp-Event reagieren kann Application.DoEvents() Loop End If End Sub Private Sub Button1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp ' Aktion beenden bMouseDown = False End Sub End Class