VB的变量作用域_参数传递及键盘事件
第 19 卷 第 5 期 Vol.19 No.5 天 中 学 刊
2004 年 10 月 Journal of Tianzhong Oct.2004
VB 的变量作用域、参数传递及键盘事件
张飞
:驻马店师范高等专科学校,河南 驻马店 463000:
摘 要:在 VB 中定义变量时,定义所在的位置十分重要;形参的值变化时是否影响实参的值,取决于参数的传 递形式是传值还是引用;面向对象的程序是按事件触发的先后顺序来执行的,
关键词:面向对象;变量;作用域;参数;传值;引用
() 中图分类号:TP311 文献标识码:B 文章编号:1006-5261200405-0049-02 VISVAL BASIC(简称 VB)面向对象程序设计语言具 的“通用声明”部分用 dim 或 private 定义,可以被本窗
功能强大、容易学习掌握等特点(但在教学中发现,不少或本模块中的其他过程或
数调用,变量的值在本窗体或
生在学习 VB 的过程中,对变量的作用域、参数传递及键 块被卸载后才被清空(
例 2 对于下面的程序代码: 事件等内容不能很好地掌握,其中一个原因是有关资料对
dim a as integer 些内容的介绍不够系统(以下根据自己的经验,就变量的
()private sub command1_click 用域、参数传递及键盘事件进行探讨(
a=7: print a 变量的作用域end sub
()private sub command2_click 变量的作用域决定了哪些子过程和函数过程可访问该
a=a+3: print a 量(变量按作用域可分为局部变量、窗体模块级变量和全
end sub 变量(在定义变量时,定义所在的位置十分重要(
() 1局部变量(局部变量只能在本过程或函数过程中有 程序运行中,若单击 command1 后,再单击 command2,
果应是 7 和 10(如果连续单击 command2,则变量 a 的值 义,又可分为动态变量和静态变量(动态变量的值随过程
用的结束而被释放,动态变量在过程中用 dim 定义;静态 每次增加 3(
() 3全局变量(全局变量是在一个工程中,可以被本 量的值在过程调用结束时不被释放,而是在窗体关闭后被
放,静态变量在过程中用 static 定义( 程中其他窗体或模块访问的变量(在窗体或模块的“通用例 1 一个窗体上有 command1 和 command2 两个命令 明”部分用 public 定义,定义所在的位置不同,其他窗体
钮,程序代码如下:过程引用该变量的方式也有所不同(如在窗体的公共部分
()private sub command1_click 用 public 定义,则工程内的其他窗体或模块引用该变量时 dim a as integer 应加上该变量所在的窗体名;如在
模块内用 public
义,则工程内的其他窗体或模块引用该变量时直接引用 a=a+3: print a
end sub 在一个工程中,如果全局变量、窗体模块级变量和局
() private sub command2_click 变量同名时,作用域范围小的变量优先(
例 3 下面的程序,运行时先后单击 command1 static b as integer command2,则窗体上显示 3 和 0( b=b+3: print b
dim a as integer end sub
()private sub command1_click 分别连续单击 command1 和 command2,前者连续显示 dim a as integer 后者按 3,6, 递增(这是因为变量 a 是动态变量,过
a=a+3: print a 调用结束时便被释放;变量 b 是静态变量,过程调用结束 end sub 不被释放(()private sub command2_click () 2窗体模块级变量(窗体模块级变量在本窗体或模块
稿日期:2004-01-28
者简介:张飞(1974 ),男,河南遂平人,驻马店师专计算机科学系助教,
print a 的一个事件过程(在键盘事件 keypress 中,参数 keyascii 返
回的值是键盘上键位的 ASCII 码( end sub 例 6 对于下面的一段程序: 2 过程的参数传递 ()private sub text1_keypress keyascii as integer
print keyascii 2.1 传值与引用 end sub 在 VB 中,过程的调用离不开参数的传递,传递的形式
又可分为传值与引用(采用传值方式,实参与形参占用不同 运行程序时在 Text1 上单击键盘上的数字键、英文字母键等, 的存储空间,形参的值变化时不影响实参的值;采用引用方 窗体上显示对应字符的 ASCII 码;若单击键盘上的功能键、 式,实参与形参占用同一个存储空间,形参的值变化时实参 方向键等,窗体上无任何显示( 的值也随之变化(在过程中采用那种传递方式,完全由形式 () 2键盘事件 keydown 是键盘上某键被按下后触发的一 参数前的关键字决定,若形式参数前有关键字 byval,则按 个事件过程(键盘事件 keyup 是键盘上按下的某键弹起后触 传值方式结合;若形式参数前有关键字 byref 或没有关键字, 发的一个事件过程(这两个键盘都有 keyCode 和 Shift 两个 则按引用方式结合( 参数,keyCode 参数返回的是键盘上每个键位的键盘码,该 例 4 对于下面的一段程序: 码是以“键”为准,双字符键位的键盘码以下档字符的 ascii ()private sub aabyval m as integer, byref n as integer 码为准;Shift 参数决定 Shift 键、Alt 键、Ctrl 键的执行状态
m=m+7: n=n+7: print m, n; (3 个键可以任意组合),这 3 个键分别以二进制表示:Shift
为 0001、Alt 为 0010、Ctrl 为 0100( end sub 例 7 对于下面的一段程序: () private sub command1_click(Private Sub Text1_keydownkeycode as integer,shift as dim a as integer, b as integer )integer ()a=3: b=4: call aaa,b: print a,b Print keycode: if shift=3 then print “Shift+Alt” end sub End Sub 如果单击 command1,则窗体上显示出 10,11,3,11(原(Private Sub Text1_keyupkeycode as integer, shift as 因是形参 m 与实参 a 间采用的是传值方式,m 变化时 a 不
)变化;形参 n 与实参 b 间采用的是引用方式,n 变化时 b 也 integer
随之变化( Print keycode: If shift=3 then print "Shift+Crtl" 2.2 形式参数与变量 End Sub 形式参数只是形式意义的参数,名字并不重要(形式参 运行程序是会出现以下现象:输入大写字母或小写字母时,数只在过程中有意义,过程调用结束后形式参数的存储空间 窗体上都会输出该字母的大写字母的键盘码,即大写字母的 会被动态释放,因此,形式参数与普通变量虽然同名,但代 ASCII 码;输入一个字母窗体上输出两个相同的结果,因为 表的意义绝不相同( 按下一字母的过程,要先后触发两个事件(keydown keyup); 例 5 对于下面的一段程序: 当 Shift 与 Alt 和字母三键同时按下后,窗体上会输出
dim m as integer, n as integer “Shift+Alt”字符(shift 参数的值=0001+0010)(
()private sub aam as integer, n as integer 3.2 键盘事件的触发次序
面向过程的程序是按程序代码的先后顺序来执行,而面 m=m+3: n=n-3
向对象的程序是按事件触发的先后顺序来执行(在面向对象 end sub
的程序设计中,即使程序代码相同,但触发顺序不同时,程 ()private sub command1_click 序运行的结果会不相同(3 种键盘事件的触发顺序应为 () call aa3,3keydown,keyup,keypress( print m, n
end sub
程序运行后单击 command1 后,窗体上显示 0 和 0 而不是 6
和 0(原因在于虽然 3(实参)传递给了形参 m 和 n,但过
程调用结束后形参的值又被动态释放(变量 m 和 n 虽是窗
体模块级变量(由 dim 语句定义),但均未被赋值,所以保 参考文献:
持初值为 0 的结果( [1] 龚沛曾,陆尉民,杨志强,VB 程序设计教程[M],北京:
高等教育出版社,1998,104 167,
[2] 刘炳文,杨明福,陈定中,VB 程序设计二级教程[M],北
京:高等教育出版社,2001,228 235,
[3] 姚树兵,戴红,陈哲,VB 入门与提高[M],北京:清华
大学出版社,1999,49 56, 3 键盘事件的参数及触发次序
3.1 键盘事件的参数 〔责任编辑 张继金〕() 1键盘事件 keypress 是键盘上某键按下又弹起后触发