VB编程设计题:红绿灯

如题所述

如图在窗体上添加:

1、四个shape控件,作为灯框、红灯、黄灯、绿灯,分别命名为:LampBox、RedLamp、YellowLamp、GreenLamp

2、一个命令按钮,命名为:cmdRun,标题为“启动”

3、三个文本框控件,来设置红灯、黄灯、绿灯亮的时间(秒),分别命名为:txtRedTime、txtYellowTime、txtGreenTime

4、四个时钟控件,作为红灯、黄灯、绿灯和闪烁时间控制,分别命名为:tmrRed、tmrYellow、tmrGreen、tmrChange

5、其它控件和布局见图

程序如下:

Private Red As Long

Private Yellow As Long

Private Green As Long

Private Black As Long

Private LampNo As Integer

Private Sub cmdRun_Click()

  If cmdRun.Caption = "启动" Then

    txtRedTime.Enabled = False

    txtYellowTime.Enabled = False

    txtGreenTime.Enabled = False

    cmdRun.Caption = "停止"

    tmrRed.Interval = Val(txtRedTime.Text) * 1000

    tmrYellow.Interval = Val(txtYellowTime.Text) * 1000

    tmrGreen.Interval = Val(txtGreenTime.Text) * 1000

    LampNo = 0

    tmrChange.Enabled = True

  Else

    tmrRed.Enabled = False

    tmrYellow.Enabled = False

    tmrGreen.Enabled = False

    tmrChange.Enabled = False

    RedLamp.FillColor = Black

    YellowLamp.FillColor = Black

    GreenLamp.FillColor = Black

    txtRedTime.Enabled = True

    txtYellowTime.Enabled = True

    txtGreenTime.Enabled = True

    cmdRun.Caption = "启动"

  End If

End Sub

Private Sub Form_Load()

  tmrRed.Enabled = False

  tmrYellow.Enabled = False

  tmrGreen.Enabled = False

  tmrChange.Enabled = False

  Red = &HFF&

  Yellow = &HFFFF&

  Green = &HFF00&

  Black = &H0&

  LampBox.FillColor = Black

  RedLamp.FillColor = Black

  YellowLamp.FillColor = Black

  GreenLamp.FillColor = Black

  tmrChange.Interval = 300

  txtRedTime.Text = 6

  txtYellowTime.Text = 1

  txtGreenTime.Text = 8

End Sub

Private Sub tmrChange_Timer()

  Static n As Integer

  n = n + 1

  Select Case LampNo

  Case 0

    If RedLamp.FillColor = Black Then

        RedLamp.FillColor = Red

        YellowLamp.FillColor = Yellow

        GreenLamp.FillColor = Green

    Else

        RedLamp.FillColor = Black

        YellowLamp.FillColor = Black

        GreenLamp.FillColor = Black

    End If

  Case 1

    If RedLamp.FillColor = Black Then

      RedLamp.FillColor = Red

    Else

      RedLamp.FillColor = Black

    End If

  Case 2

    YellowLamp.FillColor = Yellow

  Case 3

    If GreenLamp.FillColor = Black Then

        GreenLamp.FillColor = Green

    Else

        GreenLamp.FillColor = Black

    End If

  End Select

  If n = 4 Then

    n = 0

    LampNo = LampNo + 1

    If LampNo = 5 Then LampNo = 1

    Select Case LampNo

    Case 1

        RedLamp.FillColor = Red

        YellowLamp.FillColor = Black

        GreenLamp.FillColor = Black

        tmrRed.Enabled = True

        

    Case 2, 4

        RedLamp.FillColor = Black

        YellowLamp.FillColor = Yellow

        GreenLamp.FillColor = Black

        tmrYellow.Enabled = True

    Case 3

        RedLamp.FillColor = Black

        YellowLamp.FillColor = Black

        GreenLamp.FillColor = Green

        tmrGreen.Enabled = True

    End Select

    tmrChange.Enabled = False

  End If

  

End Sub

Private Sub tmrGreen_Timer()

  tmrChange.Enabled = True

  tmrGreen.Enabled = False

End Sub

Private Sub tmrRed_Timer()

  tmrChange.Enabled = True

  tmrRed.Enabled = False

End Sub

Private Sub tmrYellow_Timer()

  tmrChange.Enabled = True

  tmrYellow.Enabled = False

End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-08
这些数字与timer的时间间隔计数有关:
绿灯亮3个计时单位,然后黄灯亮2个计时单位,然后红灯亮3个计时单位,最后再亮黄灯1个计时单位,依次循环下去,按这个数下去就知道了。
=================================
因为select case 只用到个位数的1~9,而0没有选择,实际上就是和9是一致的,而如果用100取余的话,那SELECT CASE的情况,就是100(0~99)个了,但信号灯的情况就3种,那样就没太大实际意义了,最多就是可以将每个的延时设置得变化更多些,用1000取余就更不用说了。
实际的运行结果是:
绿灯亮3个计时单位(1~3)->黄灯亮2个计时单位(4,5)->红灯亮3个计时单位(6~8)->黄灯亮2个计时单位(9,0)->再到绿灯.....不断循环下去
相似回答