PD虚拟机    VPS    微软    Win10    苹果    Office2016

VB编程基础教程4-高级变量主题

 编程开发   2005-02-25

使用多个同名的变量
如果不同模块中的公用变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在 form1 和 module1 中都声明了的公用 integer 变量 intx,则把它们作为 module1.intx 和 form1.intx 来引用便得到正确值。
为了看清这是如何工作的,在一个新工程中插入两个标准模块,并在窗体上画上三个命令按钮。
在第一个标准模块 module1 之中声明一个变量 intx。test 过程设置它的值:
public intx as integer      ‘声明 module1 的 intx。
sub test ()
   ’设置 module1 的 intx 变量的值。
   intx = 1  
end sub
在第二个标准模块 module2 中声明了第二个变量 intx,它有相同的名字。又是名为 test 的过程设置它的值:
public intx as integer      ‘声明了 module2 的 intx。
sub test ()
   ’设置 module2 的 intx 变量的值。
   intx = 2  
end sub
在窗体模块中声明了第三个变量 intx。名为 test 的过程又一次设置它的值。
public intx as integer      ‘声明了该窗体的 intx 变量。
sub test ()
   ’ 设置 form 中的 intx 变量值。
   intx = 3
end sub
在三个命令按钮的 click 事件过程中,每一个都调用了相应的 test 过程,并用 msgbox 来显示这三个变量的值。
private sub command1_click ()
   module1.test               ‘ 调用 module1 中的 test。
   msgbox module1.intx         ’ 显示 module1 的 intx。
end sub
private sub command2_click ()
   module2.test               ‘ 调用 module2 中的 test。
   msgbox module2.intx         ’ 显示 module2 的 intx。
end sub
private sub command3_click ()
   test                     ‘ 调用 form1 中的 test。
   msgbox intx               ’ 显示 form1 的 intx。
end sub
运行应用程序,单击三个命令按钮中的每一个按钮。于是将看到三个公用变量被分别引用。注意在第三个命令按钮的 click 事件过程中,在调用 form1 的 test 过程时不必指定 form1.test,在调用 form1 的 integer 变量的值时也不必指定 form1.intx 。如果多个过程或变量同名,则 visual basic 会取变化更受限制的值,在这个例子中,就是 form1 变量。
公用变量与局部变量的比较
在不同的范围内也可有同名的变量。例如,可有名为 temp 的公用变量,然后在过程中声明名为 temp 的局部变量。在过程内通过引用名字 temp 来访问局部变量;而在过程外则通过引用名字 temp 来访问公用变量。通过用模块名限定模块级变量就可在过程内访问这样的变量。
public temp as integer
sub test ()
   dim temp as integer
   temp = 2                  ‘ temp 的值为 2。
   msgbox form1.temp         ’ form1.temp 的值为 1。
end sub
private sub form_load ()
   temp = 1                  ‘ 将 form1.temp 的值设置成 1。
end sub
private sub command1_click ()
   test  
end sub
一般说来,当变量名称相同而范围不同时,局限性大的变量总会用“阴影”遮住局限性不太大的变量(即优先访问局限性大的变量)。所以,如果还有名为 temp 的过程级变量,则它会用“阴影”遮住模块内部的公用变量 temp。
阴影窗体属性和控件
由于阴影效应,窗体属性、控件、常数和过程皆被视为窗体模块中的模块级变量。窗体属性或控件的名称与模块级变量、常数、自定义类型或过程的名称相同是不合法的,因为它们的范围相同。
在窗体模块内,和窗体中控件同名的局部变量将遮住同名控件。因此必须引用窗体名称或 me 关键字来限定控件,才能设置或者得到该控件的值或它的属性值。例如:
private sub form_click ()
dim text 1 , backcolor
’假定该窗体有一个控件也叫做 text1。
   text1 = "variable"       ‘变量用“阴影”遮住控件。
   me.text1 = "control"       ’要得到控件,必须用‘me’限定。
   text1.top = 0          ‘导致出错!
   me.text1.top = 0       ’要得到控件,必须用‘me’限定。
   backcolor = 0          ‘变量用“阴影”遮住属性。
   me.backcolor = 0       ’要得到窗体属性,必须用‘me’限定。
end sub
使用同名的变量和过程
专用模块级变量和公共模块级变量的名字也会和过程名冲突。模块中的变量不能和任何过程同名,也不能和模块中定义的类型同名。但可以和公用过程或其它模块中定义的类型或变量同名。在这种情况下,从别的模块访问这个变量时,就必须用模块名来限定。
虽然上面讨论阴影规则并不复杂,但是用阴影的方法可能会带来麻烦,而且会导致难以查找的错误。因此,对不同的变量使用不同的名称才是一种好的编程习惯。在窗体模块中应尽量使变量名和窗体中的控件名不一样。






    评论内容 (*必填):
    Ctrl + Enter 快速提交