你的位置:创意公社- ideaer >> >> 程序开发 >> 详细内容 在线投稿

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

排行榜 打印 发给朋友 举报 发布者:mr5414
热度214票  浏览111次 【共0条评论】【我要评论 时间:2010年4月13日 01:21

A[Dsb.j1使用多个同名的变量
l$F:w _`%l;@G1如果不同模块中的公用变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在 form1 和 module1 中都声明了的公用 integer 变量 intx,则把它们作为 module1.intx 和 form1.intx 来引用便得到正确值。创意公社- ideaer]l'}V|w
为了看清这是如何工作的,在一个新工程中插入两个标准模块,并在窗体上画上三个命令按钮。
I8ty\7n%HYcZl3W3F G1在第一个标准模块 module1 之中声明一个变量 intx。test 过程设置它的值:
'|U!p8x(@1public intx as integer      ‘声明 module1 的 intx。创意公社- ideaer/bbdq!i%k9h C ~ v
sub test ()创意公社- ideaer S~o3@3^
   ’设置 module1 的 intx 变量的值。创意公社- ideaerB]8s7J/w
   intx = 1  
9^XPeB$LUuT0{1end sub创意公社- ideaer EE6@zn~&f|4e
在第二个标准模块 module2 中声明了第二个变量 intx,它有相同的名字。又是名为 test 的过程设置它的值:
,|`"VMU1public intx as integer      ‘声明了 module2 的 intx。
^ RLUD]!Tr9W1sub test ()创意公社- ideaerDoQUi%S$L
   ’设置 module2 的 intx 变量的值。
G${r,w3f*M@G1   intx = 2  
Z:Co.z PPh.R1end sub创意公社- ideaerLA)b"[G[F1Cf X0F4e
在窗体模块中声明了第三个变量 intx。名为 test 的过程又一次设置它的值。创意公社- ideaer7h`'Uzz3o6mO
public intx as integer      ‘声明了该窗体的 intx 变量。创意公社- ideaer3s.u dF-|D~
sub test ()创意公社- ideaer*@^@@C2T
   ’ 设置 form 中的 intx 变量值。
4_2X\n.t&j"I4d Z1   intx = 3
:E.jR(Mj%]1end sub创意公社- ideaer#L:Sd/O V+\F
在三个命令按钮的 click 事件过程中,每一个都调用了相应的 test 过程,并用 msgbox 来显示这三个变量的值。创意公社- ideaerCv#ia,mS~6^&R
private sub command1_click ()
6\qu1p L9rC2f%r1   module1.test               ‘ 调用 module1 中的 test。创意公社- ideaer]0vBH$F` ZfC
   msgbox module1.intx         ’ 显示 module1 的 intx。
lk*R:Y F-n7Z1end sub创意公社- ideaer6J5Qm'MZ
private sub command2_click ()创意公社- ideaer&|*Y-f(\I'l+UXx(C
   module2.test               ‘ 调用 module2 中的 test。
B;z(IO8v9n*V1   msgbox module2.intx         ’ 显示 module2 的 intx。
(]6?Y7k)P1end sub
Q:qo'W6t1private sub command3_click ()
Px]2W s P_o1   test                     ‘ 调用 form1 中的 test。
0y+Y {y"M(Bw a1   msgbox intx               ’ 显示 form1 的 intx。
|(Ljo#M5Za qf'_(p1end sub
6\ p{5a;m3q4w#d1运行应用程序,单击三个命令按钮中的每一个按钮。于是将看到三个公用变量被分别引用。注意在第三个命令按钮的 click 事件过程中,在调用 form1 的 test 过程时不必指定 form1.test,在调用 form1 的 integer 变量的值时也不必指定 form1.intx 。如果多个过程或变量同名,则 visual basic 会取变化更受限制的值,在这个例子中,就是 form1 变量。创意公社- ideaerr,T(Ut c ?]
公用变量与局部变量的比较创意公社- ideaerb1]V)iTaQ}Q"rI?
在不同的范围内也可有同名的变量。例如,可有名为 temp 的公用变量,然后在过程中声明名为 temp 的局部变量。在过程内通过引用名字 temp 来访问局部变量;而在过程外则通过引用名字 temp 来访问公用变量。通过用模块名限定模块级变量就可在过程内访问这样的变量。创意公社- ideaerHbyO\|Y6p
public temp as integer
FpQ?.i1c:msr1sub test ()
C6e YZ+eh3y1   dim temp as integer
E?:OM3uip.z5]*Q z1   temp = 2                  ‘ temp 的值为 2。
hEQ.l\L R+g u1   msgbox form1.temp         ’ form1.temp 的值为 1。创意公社- ideaer"S5|%lSH2e vi
end sub
wM J lN x9X2q1private sub form_load ()创意公社- ideaer)o,m,mqt0VR
   temp = 1                  ‘ 将 form1.temp 的值设置成 1。创意公社- ideaer4E!U(Qz'bj:RrD'`)Sw
end sub 创意公社- ideaer.k0\,zh!h3s&JH
private sub command1_click ()创意公社- ideaerMGD`(|
   test   创意公社- ideaer h] @4?#hw6od)q
end sub创意公社- ideaerJ?t o]P
一般说来,当变量名称相同而范围不同时,局限性大的变量总会用“阴影”遮住局限性不太大的变量(即优先访问局限性大的变量)。所以,如果还有名为 temp 的过程级变量,则它会用“阴影”遮住模块内部的公用变量 temp。
'm+S0?#]5~"p$T[y1阴影窗体属性和控件
/p$Q4Yqj#c J#Fo*p^]1由于阴影效应,窗体属性、控件、常数和过程皆被视为窗体模块中的模块级变量。窗体属性或控件的名称与模块级变量、常数、自定义类型或过程的名称相同是不合法的,因为它们的范围相同。创意公社- ideaerd$kq.zO qy
在窗体模块内,和窗体中控件同名的局部变量将遮住同名控件。因此必须引用窗体名称或 me 关键字来限定控件,才能设置或者得到该控件的值或它的属性值。例如:
v%Ak1G+xQs.e'f!s1private sub form_click ()创意公社- ideaer#t2t,O#~^{ m
dim text 1 , backcolor创意公社- ideaerURG&z~4P%j
’假定该窗体有一个控件也叫做 text1。
#~ gj;I0R,N{-F8uC1   text1 = “variable”       ‘变量用“阴影”遮住控件。
]!l![H JoB4mo1   me.text1 = “control”       ’要得到控件,必须用‘me’限定。创意公社- ideaerV"U GX~
   text1.top = 0          ‘导致出错!创意公社- ideaer ?~2Ou5k:u+I$G
   me.text1.top = 0       ’要得到控件,必须用‘me’限定。
:C O(i:yuZ(C7w?1   backcolor = 0          ‘变量用“阴影”遮住属性。创意公社- ideaer$W-_k[-^Rq
   me.backcolor = 0       ’要得到窗体属性,必须用‘me’限定。
e;s)I A/G%V1end sub
{M&\$|{fQ*n1使用同名的变量和过程创意公社- ideaer"D6QaZZpqo
专用模块级变量和公共模块级变量的名字也会和过程名冲突。模块中的变量不能和任何过程同名,也不能和模块中定义的类型同名。但可以和公用过程或其它模块中定义的类型或变量同名。在这种情况下,从别的模块访问这个变量时,就必须用模块名来限定。创意公社- ideaer:KZj R8y9d9uD
虽然上面讨论阴影规则并不复杂,但是用阴影的方法可能会带来麻烦,而且会导致难以查找的错误。因此,对不同的变量使用不同的名称才是一种好的编程习惯。在窗体模块中应尽量使变量名和窗体中的控件名不一样。创意公社- ideaer;\@%oK4V*r*O
创意公社- ideaer/IsMy)R&HZl

顶:6 踩:11
对本文中的事件或人物打分:
当前平均分:0.32 (56次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.58 (50次打分)
【已经有91人表态】
18票
感动
9票
路过
10票
高兴
10票
难过
9票
搞笑
6票
愤怒
13票
无聊
16票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】