我用vb程序设计交通红绿灯为什么只显示红灯,请高手指点

2025-04-27 16:08:31
推荐回答(2个)
回答1:

其实你的问题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

回答2:

修改如下:

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