使用静态变量

我们知道,在事件代码运行过程中,普通变量的值并不会保存,下次运行事件代码时,变量会重新回到初始值。
虽然我们可以用全局变量保存值,以便下次调用,但是全局变量主要用于不同事件之间的数据交换,资源"开销"较大。
如果不需要和其它事件交换数据,仅仅是为了保存数据,以便下次运行事件代码的时候调用,那么请使用静态变量。
和普通变量一样,静态变量只能在定义它的事件代码中访问,但是静态变量的值能够保存到下次运行事件代码。

声明静态变量的语法是:

Static 变量名 As 数据类型

例如:

Static Name As String

静态变量通常用于标记。

示例一

为了说明普通变量和静态变量的差别,请在项目事件MainTableChanged加入如下代码:

Dim Val1 As Integer '定义一个普通变量Val1
Static Val2
AS Integer '定义一个静态变量Val2
Val1 = Val1 +
1
Val2 = Val2 +
1
MessageBox.Show(
"Val1 = " & Val1 & " Val2 = " & Val2)

设置完成后,反复切换主表,你会发现Val1的值始终是1,而Val2的值在每次切换主表后都会加1。
这是因为Val1是一个普通变量,虽然每次运行时也给Val1的值加上了1,但是增加后的值,并不会保存到下次运行。
而Val2是一个静态变量,每次运行给Val2的值加1,这个增加后的值会保存到下次运行,所以每次都是在上一次加1的基础上再加1。

示例二

假定订单表中有一个窗口“订单筛选”,我们希望第一次进入订单表的时候,能够自动打开这个窗口。
问题来了,怎么才能知道是第一次进入订单表呢?
很简单,只需将项目的MainTableChanged事件设为:

Static i As Integer '定义静态变量i
If
MainTable.Name = "订单" Then '如果进入的是订单表
   
If i = 0 Then '假如i等于0
        i =
1 '那么将i的值设为1
        Forms(
"订单筛选").Show() '打开窗口
    End If
End
If

代码原理很简单,第一次进入订单表的时候,静态变量i的值等于0,所以打开窗口,而之后进入订单表的时候,由于i的值已经等于1,所以不会打开窗口。

示例三

假定规定某个表每天只能增加500行,我们只需该表的BeforeAddDataRow事件的代码设为:

Static i As integer '定义一个静态变量
i = i +
1 '每次增加行,静态变量的值就加1
If
i > 500 Then '如果增加了500行
    Messagebox.Show(
"每天只能在表A中增加500行!","提示")
    e.Cancel =
True '那么取消增加行
End
If


本页地址:http://www.foxtable.com/webhelp/topics/1061.htm