主题:[讨论]在timer1中怎么实现累加
大大大大
[专家分:10] 发布于 2009-08-22 15:20:00
Private Sub Timer1_Timer()
Dim ttime As Date
If (cmdstart.Caption = "停止" And cmdtime.Caption = "时间") Then
ttime = TimeValue(ttime) + TimeValue("00:00:01")
lblshowtime.Caption = CStr(ttime)
i = 1
i = i + i
Print i
Else
lblshowtime.Caption = Time
End If
我其实是想实现秒表的计数功能.但测试下来,实际lblshowtime.caption=CStr(ttime)中ttime的值是"00:00:01",不能实现累加.其中,i值是我后加的,也不能累加,请指点,怎么实现累加.
在command2中控制timer1.interval
Private Sub Command2_Click()
Timer1.Interval = 1000
End Sub
回复列表 (共7个回复)
沙发
天天学习 [专家分:4570] 发布于 2009-08-23 00:44:00
dim ttime as date
换成:
static ttime as Date
板凳
大大大大 [专家分:10] 发布于 2009-08-23 08:42:00
果然好使,能解释下为什么吗?另外I=I+1不能在框内累加,有好方法吗?
3 楼
天天学习 [专家分:4570] 发布于 2009-08-23 10:22:00
[quote]另外I=I+1不能在框内累加[/quote]
同样的方法,static i as integer
以下为msdn上对static关键字、静态变量的说明:
[quote]
静态变量
除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于 Dim 声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。
但可将局部变量定义成静态的,从而保留变量的值。在过程内部用 Static 关键字声明一个或多个变量,其用法和 Dim 语句完全一样:
Static Depth
例如,下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加,以计算运营总值。
Function RunningTotal (num)
Static ApplesSold
ApplesSold = ApplesSold + num
RunningTotal = ApplesSold
End Function
如果用 Dim 而不用 Static 声明 ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。
在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。
声明所有的局部变量为静态变量
为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:
Static Function RunningTotal (num)
这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程。
[/quote]
4 楼
我是大喊三 [专家分:3010] 发布于 2009-08-24 14:03:00
一些基本的变量类型等没有掌握啊
5 楼
大大大大 [专家分:10] 发布于 2009-08-25 15:50:00
谢谢,高手的指点。我还是小白。不过我会学习的。以编程带动学习。我不愿意等先看完书再学。很烦。
6 楼
golden8510 [专家分:80] 发布于 2009-09-01 11:26:00
[quote][quote]另外I=I+1不能在框内累加[/quote]
同样的方法,static i as integer
以下为msdn上对static关键字、静态变量的说明:
[quote]
静态变量
除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于 Dim 声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。
但可将局部变量定义成静态的,从而保留变量的值。在过程内部用 Static 关键字声明一个或多个变量,其用法和 Dim 语句完全一样:
Static Depth
例如,下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加,以计算运营总值。
Function RunningTotal (num)
Static ApplesSold
ApplesSold = ApplesSold + num
RunningTotal = ApplesSold
End Function
如果用 Dim 而不用 Static 声明 ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。
在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。
声明所有的局部变量为静态变量
为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:
Static Function RunningTotal (num)
这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程。
[/quote][/quote]
==>從以上靜態變量的定義,能否理解成"靜態變量"可保存上次的運行結果,dim定義静态变量重新初始化。
mail:golden8510@163.com
7 楼
我是大喊三 [专家分:3010] 发布于 2009-09-02 13:21:00
楼上的,静态变量一般用于过程,函数内.因为过程或函数一旦退出,里面的变量全部都要作废.所以定义静态变量是为了保存过程或函数的一些计算值.就象上面的计时累加.另外你说的"DIM定义静态变量重新初始化"是什么意思?因为定义在过程内部,所以它仍然属于局部变量,你在外面是不能访问它的,你在外面重新定义一个,也只能视为两个不同的变量而已.你要它清零,退出时赋值即可.
我来回复