VB编程基础教程4-高级变量主题
- 爱奇艺限时半价 | 30+正版软件打折 | PD 虚拟机 7 折 | RackNerd 黑五 | 京东 Plus ¥69
使用多个同名的变量
如果不同模块中的公用变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在 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
使用同名的变量和过程
专用模块级变量和公共模块级变量的名字也会和过程名冲突。模块中的变量不能和任何过程同名,也不能和模块中定义的类型同名。但可以和公用过程或其它模块中定义的类型或变量同名。在这种情况下,从别的模块访问这个变量时,就必须用模块名来限定。
虽然上面讨论阴影规则并不复杂,但是用阴影的方法可能会带来麻烦,而且会导致难以查找的错误。因此,对不同的变量使用不同的名称才是一种好的编程习惯。在窗体模块中应尽量使变量名和窗体中的控件名不一样。
/ 关注 “异次元软件世界” 微信公众号,获取最新软件推送 /
如本文“对您有用”,欢迎随意打赏异次元,让我们坚持创作!
赞赏一杯咖啡