Timer funktioniert nicht richtig...
lima-city → Forum → Programmiersprachen → Basic
abstand
ampel
button
code
einstellen
endlos schleife
form
intervall
leute
maus
rahmen
sekunde
sender
start
system
tick
windows
-
Hallo Leute, ich hab mir eine Ampel gemacht, mit einem Timer der nach Button Klick startet und verschiedene Shapes nacheinander anzeigt. An sich funktioniert es auch, aber nur wenn ich den Button mehrmals klicke!
Das ist mein Button:
Private Sub btn_on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_on.Click Timer1.Start() End Sub
Und das mein Timer:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_on.Click zaehler += 1 If zaehler = 2 Then shape_red.Visible = True End If If zaehler = 3 Then shape_yellow.Visible = True End If If zaehler = 4 Then shape_green.Visible = True End If End Sub
Welcher ja ausgelöst wird, durch btn_on.Click... Aber statt weiter zu zählen und den nächsten Shape anzuzeigen passiert gar nichts.. Wenn ich aber öfters auf den Button klicke, dann werden die Shapes angezeigt.
//EDIT: Kann geschlossen werden, die Lösung:
Button On Click:
Private Sub btn_on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_on.Click Timer1.Enabled = True btn_on.Visible = False btn_off.Visible = True End Sub
FormLoad
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Enabled = False Timer2.Enabled = False Timer3.Enabled = False Timer4.Enabled = False Timer5.Enabled = False Timer6.Enabled = False End Sub
Die verschiedenen Timer:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_on.Click zaehler += 1 If zaehler = 2 Then shape_red.Visible = True Timer2.Enabled = True Timer1.Enabled = False End If End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick zaehler += 1 If zaehler = 3 Then shape_yellow.Visible = True shape_red.Visible = False Timer3.Enabled = True Timer2.Enabled = False End If End Sub Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick zaehler += 1 If zaehler = 4 Then shape_green.Visible = True shape_yellow.Visible = False Timer4.Enabled = True Timer3.Enabled = False End If End Sub Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick zaehler += 1 If zaehler = 5 Then shape_yellow.Visible = True shape_green.Visible = False Timer5.Enabled = True Timer4.Enabled = False End If End Sub Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick zaehler += 1 If zaehler = 6 Then shape_red.Visible = True shape_yellow.Visible = False Timer6.Enabled = True Timer5.Enabled = False End If End Sub Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick zaehler += 1 If zaehler = 7 Then shape_yellow.Visible = True shape_red.Visible = False zaehler = 1 Timer2.Enabled = True Timer6.Enabled = False End If End Sub
Button Off Click:
Private Sub btn_off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_off.Click Timer1.Enabled = False Timer2.Enabled = False Timer3.Enabled = False Timer4.Enabled = False Timer5.Enabled = False Timer6.Enabled = False shape_red.Visible = False shape_yellow.Visible = False shape_green.Visible = False btn_off.Visible = False btn_on.Visible = True End Sub
Da meine Form keinen Rahmen hat, noch mit der Maus verschiebbar machen:
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then MouseLocation = e.Location End If End Sub Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then Me.Location = e.Location - MouseLocation + Me.Location End If End Sub
Und einen "eigenen" schließen Button hinzufügen:
Private Sub btn_close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_close.Click Me.Close() End Sub
Erklärung dazu:
Der Timer wird geandelt (initiiert) von dem Button_on.Click Event, dieser wieder startet Timer2, welcher Timer3 usw. bis 5 Startet. Timer6 Allerdings setzt den zähler für den Timer wieder zurück und startet ihn erneut (es ist also praktisch eine Endlos schleife, es wird niemals aufhören, solange man nicht den aus button drückt). Mit dem Aus Button werden alle derzeitigen Shapes ausgeblendet und alle Timer gestoppt. Mit Dim zaehler As Integer wird der Startwert von dem Zähler festgelegt, Der Intervall der Timer (den man in der Benutzeroberfläche einstellen kann, wenn man auf den Timer klickt) ist für die ersten 3 auf 2000 (2 Sekunden) gesetzt, das heißt es wird rot, gelb, grün in einem Abstand von 2 Sekunden. Timer4 hat einen Intervall von 30000 (30 sekunden), damit es auch länger wieder grün bleibt. Dann von grün auf gelb auf rot wieder 2000 und rot hat wieder 30000.
Beitrag zuletzt geändert: 9.11.2011 12:06:55 von kill-a-teddy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage