Vb.net 使用定时器的交通灯程序

Vb.net 使用定时器的交通灯程序,vb.net,Vb.net,我试图做一个简单的交通灯模拟,我希望它是这样的情况下,当我按下一个按钮,序列开始,每五秒钟有一个颜色的变化。我使用了三个面板 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Panel1.BackColor = Color.White 我知道这是你为一个事件设置的方式,但是在我的程序中,顶部面板开始为红色,其他两个为白色,五秒钟

我试图做一个简单的交通灯模拟,我希望它是这样的情况下,当我按下一个按钮,序列开始,每五秒钟有一个颜色的变化。我使用了三个面板

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Panel1.BackColor = Color.White

我知道这是你为一个事件设置的方式,但是在我的程序中,顶部面板开始为红色,其他两个为白色,五秒钟后,我希望第二个面板变为黄色,五秒钟后,我希望前两个面板变为白色,第三个面板变为绿色。我将如何实现这一点?还有,单击按钮时如何启动该过程?

因此,我所做的是创建一个名为LightStatus的枚举,使当前点亮的灯光变量(lsCurrent)在代码中更具可读性

当窗体加载时,它以5000毫秒的间隔设置计时器属性,以便每5秒触发一次已用事件。我在触发器的已用事件中添加了一个处理程序来调用changelightsub。它还将Red传递到SetLight,以便立即点亮Red

单击按钮时,它将启动计时器。触发已过事件时,它运行ChangeLight,将lsCurrent从绿色变为黄色、黄色变为红色或红色变为绿色,并调用SetLight,根据lsCurrent设置面板背景色

Public Class Form1

Dim tmrLight As System.Timers.Timer = New System.Timers.Timer
Dim lsCurrent As LightStatus = LightStatus.Red

Private Enum LightStatus
    Red = 1
    Yellow = 2
    Green = 3
End Enum

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

    tmrLight.Interval = 5000
    AddHandler tmrLight.Elapsed, AddressOf ChangeLight
    SetLight(LightStatus.Red)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    tmrLight.Start()

End Sub

Private Sub ChangeLight()

    Select Case lsCurrent

        Case LightStatus.Red

            lsCurrent = LightStatus.Green

        Case LightStatus.Yellow

            lsCurrent = LightStatus.Red

        Case LightStatus.Green

            lsCurrent = LightStatus.Yellow

        Case Else

            lsCurrent = LightStatus.Red

    End Select

    SetLight(lsCurrent)

End Sub

Private Sub SetLight(LightColor As LightStatus)

    Select Case LightColor

        Case LightStatus.Red

            Me.pnlRed.BackColor = Color.Red
            Me.pnlYellow.BackColor = Color.White
            Me.pnlGreen.BackColor = Color.White

        Case LightStatus.Yellow

            Me.pnlRed.BackColor = Color.White
            Me.pnlYellow.BackColor = Color.Yellow
            Me.pnlGreen.BackColor = Color.White

        Case LightStatus.Green

            Me.pnlRed.BackColor = Color.White
            Me.pnlYellow.BackColor = Color.White
            Me.pnlGreen.BackColor = Color.Green

        Case Else

            Me.pnlRed.BackColor = Color.Red
            Me.pnlYellow.BackColor = Color.White
            Me.pnlGreen.BackColor = Color.White

    End Select

End Sub

End Class

只需将计时器设置为从1数到3。创建一个将整数作为输入的方法,并在每次递增时从计时器中调用它。如果你把你的逻辑从定时器滴答事件中提取出来,放到一个子例程中,这会更容易。这会起作用的,尽管你应该解释你的逻辑,而不仅仅是转储一块代码作为答案。