Hi!
Ja, es geht ohne Timer und ohne break-Befehl!
Ich kenne den ganzen Quelltext nicht daher kann ich dir den Fehler nicht sagen.
Aber ich schreib dir mal zwei Möglichkeiten auf wie du es machen könntest.
Du musst dabei aber immer ElseIf schleifen verwenden.
Sonst könnte es sein, dass der Hintergrund von z.B. l3 gerade grün war, aber danach kam noch die Umschaltung auf rot im Sub.
Dann würde die Ampel innerhalb eines Klickes zwei mal schalten.
Hoffe das ist verständlich.
Also, eine hat DOcean schon beschrieben.
Das würde in VB6 so aussehen:
Code:
Option Explicit
Dim i as Integer #i als globale Variable festlegen
# l1 = rot
# l2 = gelb
# l3 = grün
Private Sub cmd1_click() # cmd1 heißt der Button
# Bei jedem Klick auf den Button wird abgefragt wie groß i ist.
# Dann wird mit If und ElseIf der Wert von i abgefragt und
#dementsprechend wird die Ampel geschalten.
# Wenn i den Wert 3 erreicht, wird die Variable wieder auf 0
# gesetzt und alles beginnt von Vorne!
If i = 0 then
i = i + 1 #i wird um 1 erhöht
l1.BackColor = vbred
l2.BackColor = vbwhite
l3.BackColor = vbwhite
ElseIf i = 1 then
i = i + 1
l1.Backcolor = vbred
l2.Backcolor = vbyellow
l3.BackColor = vbwhite
ElseIf i = 2 then
i = i + 1
l1.BackColor = vbwhite
l2.BackColor = vbwhite
l3.BackColor = vbgreen
ElseIf i = 3 then
i = 0
l1.BackColor = vbwhite
l2.BackColor = vbyellow
l3.BackColor = vbwhite
End If
End Sub
Private Sub Form_load()
# hier werden die Hintergrundfarben der Labels alle auf weiß gesetzt
l1.vbwhite
l2.vbwhite
l3.vbwhite
End Sub
Die Andere Methode wäre die Zustände der Labelhintergründe abzufragen.
Das sähe dann so aus:
Code:
Option Explicit
Private Sub cmd1_Click() # cmd1 = Name des Button
If l1.BackColor = vbred And l2.BackColor = vbwhite And l3.BackColor = vbwhite then
# wird ausgeführt wenn l1 = rot, l2 = weiß, l3 = weiß ist
l2.BackColor = vbyellow
ElseIf l1.BackColor = vbred And l2.BackColor = vbyellow And l3.BackColor = vbwhite then
# wird ausgeführt wenn l1 = rot, l2 = gelb, l3 = weiß ist
l1.BackColor = vbwhite
l2.BackColor = vbwhite
l3.BackColor = vbgreen
ElseIf l1.Backcolor = vbwhite And l2.BackColor = vbwhite and l3.BackColor = vbgreen then
# wird ausgeführt wenn l1 = weiß, l2 = weiß, l3 = grün ist
l2.BackColor = vbyellow
l3.BackColor = vbwhite
Elseif l1.BackColor = vbwhite And l2.BackColor = vbyellow And l3.BackColor = vbwhite then
# wird ausgeführt wenn l1 = weiß, l2 = gelb, l3 = weiß ist
l1.BackColor = vbred
l2.BackColor = vbwhite
End If
End Sub
Private Sub Form_load()
# das sind die Anfangsbedingungen
l1.BackColor = vbred
l2.BackColro = vbwhite
l3.BackColor = vbwhite
End Sub
Ich hoffe das konnte dir helfen.
Wenn du noch Fragen hast meld dich per PN.
/edit: Noch ein guter Tipp!
vb@rchiv Visual Basic Tipps, Sourcecode, Free-ActiveX, WinAPI (hoffe der link ist genehmigt)
Mfg Tigga!