回 帖 发 新 帖 刷新版面

主题:自己写的程序自己看不懂了 谁能 教教我

我写了个简单的倒计时效果,倒计时总时间为90分钟,可我现在自己也不明白了为什么x后面要加850才能使显示是倒计时1:30:00开始的样子啊,而且似乎没有一定的换算公式,也就是说你从这个例子无法推断2:00:00到底加多少。

Dim x   As Single

Private Sub Form_Load()
x = 90 * 60 [color=FF0000]+ 850[/color]
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
x = x - 0.1
Label1.Caption = CDate(x / 100000)
End Sub

回复列表 (共3个回复)

沙发

这个具体的问题很好解决。
主要在于你才开始写程序,没有发现写注释语句的主要性。
不要怕麻烦,不要怕程序体积大,写注释利人利己。

然后我来看你的程序。
CDate(x)中:
x的整数部分表示日(系统指定的日期【1900年1月1日】为2,然后每天加1)
x的小数部分表示时分秒,使用的方法是分数方式,以0:0:0为0,每秒为1/24/60/60=1/86400。
综上,你的那个(90 * 60 + 850)/100000 的思路是不对的,尽管初值正确,但不能正确计时。例如经过了90*60+850秒(即6250秒,也就是104分10,1小时44分10秒)x才可以为0,即你的计时才归零,而不是你设想的90分钟!估计你当时850是通过不断调整试验出来的数据。
所以建议代码修改为(使用了见名知意的变量和常量名可以适当减少注释):

Dim 剩余时间   As Single
Const 时 = 1
Const 分 = 30
Const 秒 = 0
Const 每秒 = 1 / 86400

Private Sub Form_Load()
    Me.Caption = "倒计时"
    剩余时间 = ((秒 / 60 + 分) / 60 + 时) / 24
    Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
    剩余时间 = 剩余时间 - 每秒 / 10
    Label1.Caption = CDate(剩余时间)
End Sub

板凳

问题得到很好的解决,谢谢老大徒伤悲,我的问题在于对于cdate()理解错误,我以为小数点后面的是按以毫秒计(受Timer1.Interval属性的影响)其实vb的记录方式是按天,要把秒折合成天不是把其他时间看成秒

3 楼

说的对。也归纳的很简练。
祝你顺利。

我来回复

您尚未登录,请登录后再回复。点此登录或注册