其实你的问题lighttime在于变量为局部变量,每一次计时器执行timer过程,都会重新生成lighttime,并且默认赋值为1,所以,永远是红灯。
只要把dim lighttime as integer这句话,移动到所有代码的最上面,变为全局变量,就可以了。
修改如下
Dim lighttime As Integer '<---这里定义全局变量
Private Sub Form_Load()
Shape1.Shape = 3
Shape2.Shape = 3
Shape3.Shape = 3
Shape1.BackStyle = 1
Shape2.BackStyle = 1
Shape3.BackStyle = 1
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
Dim n As Integer '<---这里定义n,因为n只是用于计算除以52的余数,所以用局部变量
lighttime = lighttime + 1
n = lighttime Mod 52
If n <= 25 Then
Shape1.BackColor = vbRed
Shape2.BackColor = Me.BackColor
Shape3.BackColor = Me.BackColor
ElseIf n > 25 And lighttime <= 27 Then
Shape1.BackColor = Me.BackColor
Shape2.BackColor = vbYellow
Shape3.BackColor = Me.BackColor
ElseIf n > 27 Then
Shape1.BackColor = Me.BackColor
Shape2.BackColor = Me.BackColor
Shape3.BackColor = vbGreen
End If
End Sub
修改如下:
Private Sub Form_Load()
Shape1.Shape = 3
Shape2.Shape = 3
Shape3.Shape = 3
Shape1.BackStyle = 1
Shape2.BackStyle = 1
Shape3.BackStyle = 1
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
Static n As Integer
n = n Mod 3
If n = 0 Then
Shape1.BackColor = vbRed
Shape2.BackColor = Me.BackColor
Shape3.BackColor = Me.BackColor
ElseIf n = 1 And lighttime <= 27 Then
Shape1.BackColor = Me.BackColor
Shape2.BackColor = vbYellow
Shape3.BackColor = Me.BackColor
ElseIf n = 2 Then
Shape1.BackColor = Me.BackColor
Shape2.BackColor = Me.BackColor
Shape3.BackColor = vbGreen
End If
n = n + 1
End Sub