| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 854 人关注过本帖
标题:为什么从后面开始执行了?
只看楼主 加入收藏
苍穹之舞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:35
注 册:2014-10-7
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:10 
为什么从后面开始执行了?
Private Sub Command1_Click()
Timer1.Interval = 1000
  Timer1.Enabled = True
  
End Sub





Private Sub Timer1_Timer()
   Do While i < 20
   
          i = i + 1
   
              
    If i <= 10 Then
   
          Shape1.FillColor = &HFF&      第一个图形显示为红
      ElseIf 10 < i And i <= 13 Then
   
           Shape2.FillColor = &HFFFF&        第二个图形显示为黄
      Else
   
        Shape1.FillColor = &HFFFFFF      
        Shape2.FillColor = &HFFFFFF
        Shape3.FillColor = &HFF00&             第三个图形显示为绿
   
     End If
  Loop
  
   
  
  
End Sub


上面的代码,相信老鸟们已经看明白了,就是一个模仿红绿灯的,三个圆形图形,让他们依次显示色彩

现在我的困惑是,这代码总是先显示绿,然后就不动了  
按照初衷是,显红,显黄,然后前两个灭了,显示绿

为什么代码总执行后面呢?
2014-10-27 16:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
i 是虾米东东

DO IT YOURSELF !
2014-10-27 16:09
alike123
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:107
专家分:428
注 册:2014-2-10
收藏
得分:0 
可能原因:可能你i的类型没有明确定义,导致比较的时候无论i是什么都小于10
2014-10-27 16:24
苍穹之舞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:35
注 册:2014-10-7
收藏
得分:0 
以下是引用alike123在2014-10-27 16:24:28的发言:

可能原因:可能你i的类型没有明确定义,导致比较的时候无论i是什么都小于10


补充了一个
Dim i   As Integer

还是不行,绿显示应该在i>13时才执行,可现在是一上来就执行了
2014-10-27 16:29
苍穹之舞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:35
注 册:2014-10-7
收藏
得分:0 
以下是引用wp231957在2014-10-27 16:09:14的发言:

i 是虾米东东

我也不知道啊,我是对别人的照葫芦画瓢搞的,设想就是随着时钟控件跳动,i  这个变量自加,加到某个数字时,跳进某项分支,某灯显示
2014-10-27 16:31
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:16 
程序代码:
Option Explicit

Dim 灯时计数   As Integer

Const 红灯时间 = 30
Const 黄灯时间 = 3
Const 绿灯时间 = 27
Const 灯总时长 = 红灯时间 + 黄灯时间 + 绿灯时间

Private Sub Command1_Click()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    灯时计数 = 灯时计数 + 1
    
    If 灯时计数 > 灯总时长 Then
        灯时计数 = 1
    End If
    
    If 灯时计数 <= 红灯时间 Then
        Shape1.FillColor = &HFF&      '第一个图形显示为红
        Shape2.FillColor = &HFFFFFF
        Shape3.FillColor = &HFFFFFF
    ElseIf 灯时计数 <= 红灯时间 + 黄灯时间 Then
        Shape1.FillColor = &HFFFFFF
        Shape2.FillColor = &HFFFF&         '第二个图形显示为黄
        Shape3.FillColor = &HFFFFFF
    Else
        Shape1.FillColor = &HFFFFFF
        Shape2.FillColor = &HFFFFFF
        Shape3.FillColor = &HFF00&             '第三个图形显示为绿
    End If    
End Sub


你前面代码里的主要错误在于:
1、累加变量没有复位代码。
2、在处理过程中使用了循环一次性把 累加的间隔用用掉了。所以总显示绿灯

授人于鱼,不如授人于渔
早已停用QQ了
2014-10-27 17:04
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:4 
这是因为当Timer1_Timer()事件发生后就一直没停止i=i+1,(Timer是时间控件,它总是随着时间进展不断发生的),红灯、黄灯发生的很快(你几乎没觉察到),直到i=i+1>13 后,停留在绿灯亮情况下,这时不管时间怎么变化,总是i>13的情况,所以也就总是绿灯了。
2014-10-27 17:12
苍穹之舞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:35
注 册:2014-10-7
收藏
得分:0 
以下是引用风吹过b在2014-10-27 17:04:41的发言:


Option Explicit

Dim 灯时计数   As Integer

Const 红灯时间 = 30
Const 黄灯时间 = 3
Const 绿灯时间 = 27
Const 灯总时长 = 红灯时间 + 黄灯时间 + 绿灯时间

Private Sub Command1_Click()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    灯时计数 = 灯时计数 + 1
   
    If 灯时计数 > 灯总时长 Then
        灯时计数 = 1
    End If
   
    If 灯时计数 <= 红灯时间 Then
        Shape1.FillColor = &HFF&      '第一个图形显示为红
        Shape2.FillColor = &HFFFFFF
        Shape3.FillColor = &HFFFFFF
    ElseIf 灯时计数 <= 红灯时间 + 黄灯时间 Then
        Shape1.FillColor = &HFFFFFF
        Shape2.FillColor = &HFFFF&         '第二个图形显示为黄
        Shape3.FillColor = &HFFFFFF
    Else
        Shape1.FillColor = &HFFFFFF
        Shape2.FillColor = &HFFFFFF
        Shape3.FillColor = &HFF00&             '第三个图形显示为绿
    End If   
End Sub


你前面代码里的主要错误在于:
1、累加变量没有复位代码。
2、在处理过程中使用了循环一次性把 累加的间隔用用掉了。所以总显示绿灯

感谢斑竹热心指导,但是按照你的代码,依然实现不了目标
变成开始就是红灯亮,然后静止在那里
2014-10-28 08:45
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
30秒的红灯,你没等吗?

程序的最前方定义的各个灯的时间

Const 红灯时间 = 30
Const 黄灯时间 = 3
Const 绿灯时间 = 27

单位都是 定时器 间隔。

我测试过了。没问题,你等上一分钟就可以看到。

授人于鱼,不如授人于渔
早已停用QQ了
2014-10-28 08:47
苍穹之舞
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:35
注 册:2014-10-7
收藏
得分:0 
以下是引用zhengang1026在2014-10-27 17:12:06的发言:

这是因为当Timer1_Timer()事件发生后就一直没停止i=i+1,(Timer是时间控件,它总是随着时间进展不断发生的),红灯、黄灯发生的很快(你几乎没觉察到),直到i=i+1>13 后,停留在绿灯亮情况下,这时不管时间怎么变化,总是i>13的情况,所以也就总是绿灯了。

有什么办法解决呢?你没有给出解决之道哇
2014-10-28 08:47
快速回复:为什么从后面开始执行了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017880 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved