6.1VB的过程设计及子过程(Sub)的定义与调用 o% U( @" P! w& {9 ^3 S
1.什么是过程
$ q K7 a: f% z3 I. |% A: G1 Q+ z 在程序设计中,为各个相对独立的功能模块所编写的一段程序称之为过程。5 n& F& P& o7 q3 ~+ h& a: ?
2.VB中的自定义过程分类
. {" v5 t" k4 R1 x0 \" ] (1)以“Sub”保留字开始的子程序过程 (包括事件过程和通用过程),不返回值;0 E2 z g' i$ a. G
(2)以“Function” 保留字开始的函数过程,返回一个值;$ e" k/ } y U R+ |
(3)以“Property” 保留字开始的属性过程,可以返回和设置窗体、标准模块以及类模块的属性值,也可以设置对象的值。
& t' s. C" h! E( {, T3 s, `+ c 3. 事件过程
2 |' m; t/ o0 D: L3 f3 c3 v (1)窗体事件过程
, W. p6 ~ v3 `( Q 语法:Private Sub Form_事件名([参数列表])7 p2 b" b& e6 ]
[局部变量和常数声明]8 M- F3 o& S! D/ R {+ y7 w' O6 Z
语句块
1 M$ Y3 g. A% X1 F0 Y2 e# w7 N+ D End Sub. l6 z" I( F" `" ^" J
注意:" W" i+ k: B1 R
1)窗体事件过程名由Form_事件名组成,多文档窗体用MDIForm_事件名;
" \! }9 o9 `0 V 2)每个窗体事件过程名前都有一个Private的前缀,表示该事件过程不能在它自己的窗体模块之外被调用;
. R/ Y1 i+ \, y$ [5 W 3)事件过程有无参数,完全由VB提供的具体事件本身决定,用户不可以随意添加。
1 B( U% F% L( {- i (2)控件事件过程
; N: j+ D' s5 Y+ ]# z& g 语法:Private Sub 控件名_事件名([参数列表])
3 F; f X0 t5 B; X [局部变量和常数声明]% [% m% i2 h; a2 r; j4 z8 j
语句块
/ O7 V4 I$ W# I3 W5 y End Sub
2 N! N% i0 l5 w% ~6 J2 E* | 注意:其中的控件名必须与窗体中某控件相匹配,否则VB将认为它是一个通用过程。
$ f# F' N( ?$ p* S (3)建立事件过程的方法
9 h- b. K9 X+ w 1)打开代码编辑器窗口(两种方法:双击对象或从工程管理器中单击“查看代码”按钮)
0 I6 p; {7 z3 ]0 b. q5 T 2)在代码编辑器窗口中,选择所需要的“对象”和“事件过程”
5 i! P* U6 @7 } ~2 P- C/ p1 B 3)在Private Sub …… End Sub之间键入代码
0 r* ^/ j' ^3 _! j6 R 4)保存工程和窗体
# i0 @+ E4 n h; q (4)事件过程的调用0 A/ z! p* D3 z+ A3 S
事件过程由一个发生在VB中的事件来自动调用或者由同一模块中的其他过程显示调用。
~& r% g" j& U8 K U 2.通用过程
2 f6 q- k; E9 G 通用过程是一个必须从另一个过程显示调用的程序段,通用过程有助于将复杂的应用程序分解成多个易于管理的逻辑单元,使应用程序更简洁、更易于维护。0 y- b0 b# }2 k7 e4 T
通用过程分为公有(Public)过程和私有( Private)过程两种,公有过程可以被应用程序中的任一过程调用,而私有过程只能被同一模块中的过程调用。
9 j! h/ K* g" `+ V. U1 j0 R, y (1)定义方法:/ F* l; @/ H% }7 B& U. Y
[ Private | Public ] [ Static] Sub 过程名([参数列表])1 G% f$ I8 h4 a* i. v1 h: B
[局部变量和常数声明] ‘用Dim 或Static声明
+ }' {$ i1 b2 ^2 i 语句块
) m7 c' x* ?% y' c1 @7 k [Exit Sub]$ W1 X$ X& A& {" D, `+ Z7 Z. h& V
语句块9 G: h7 V# x' X( p+ |- g6 l# Z
End Sub' [& B' k7 i) v' Z
注意:0 i* }$ R0 `8 d5 I/ F6 X
1)缺省[ Private | Public ]时,系统默认为 Public ;$ ]) f+ w0 ?$ T7 g+ z5 d
2)Static 表示过程中的局部变量为“静态”变量;! O$ R; v- L, |
3)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。
' `7 z# N2 d7 R! g 4)参数列表中的参数称为形式参数,它可以是变量名或数组名,只能是简单变量,不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。VB的过程可以没有参数,但一对圆括号不可以省略。不含参数的过程称为无参过程。
: u2 m, q3 Z! t6 x' x 形参格式为:
1 t& F/ g) P4 ]$ }- t2 e+ ` [ ByVal ] 变量名[()] [As 数据类型]/ z: W# v" I$ O7 P# m
式中:8 q4 I1 Q. I7 L( [) r# O
变量名[()]:变量名为合法的VB变量名或数组名,无括号表示变量,有括号表示数组。6 Q; D6 D4 j0 z
ByVal :表明其后的形参是按值传递参数(传值参数 Passed By Value),若缺省或用ByRef,则表明参数是按地址传递的(传址参数)或称“引用”(Passed By Reference)。
; @' W$ t% Z/ @4 A4 c) E As: 数据类型:缺省表明该形参是变体型变量,若形参变量的类型声明为String,则只能是不定长的。而在调用该过程时,对应的实在参数可以是定长的字符串或字符串数组,若形参是数组则无限制。* \' j" d n! d5 u, A: e( W
5)Sub 过程不能嵌套定义,但可以嵌套调用。' J: @" b- Q5 I, m8 m
6) End Sub 标志该过程的结束,系统返回并调用该过程语句的下一条语句。. T- i2 {8 v* k: e- q! b, U
7) 过程中可以用Exit Sub提前结束过程,并返回到下调用该过程语句的下一条语句。4 { [0 C! w G& J& m4 E
(2)建立Sub过程的方法2 _( m; P+ k3 v: m* G
方法一:1 }4 Q" z) v; m
1)打开代码编辑器窗口; C' x W8 m2 D/ B$ X1 R0 E
2)选择“工具”菜单中的“添加过程”! ~$ y( h& M( m& a, I
3)从对话框中输入过程名,并选择类型和范围' k6 X0 u8 z" K6 G( Y
4)在新创建的过程中输入内容
' F1 n! W3 b, r9 u) k+ O 方法二:& i0 |- L9 q2 }* G# H
1)在代码编辑器窗口的对象中选择“通用”,在文本编辑区输入 Private Sub 过程名7 d4 k1 x; f) L/ q
2)按回车键,即可创建一个Sub过程样板
, a" W) g( C2 w5 e! B P 3)在新创建的过程中输入内容
0 ? ]- ~" ` m+ F 3.Sub子过程的调用
/ B, R* p" A; W. i (1) 用Call语句调用Sub过程2 l7 U- @# G" p [# e
语法:Call 过程名(实在参数表)4 _, V5 w+ }$ M1 E, O
实在参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。' K: N" y, B. u7 G( H
(2)把过程名作为一个语句来用6 B' z3 g# m! o5 N
语法:过程名 [实参1[,实参2……]]
! I6 \0 d! `6 ~; z1 }+ e4 h* J 它与(1)的不同点是:去掉了关键字和实参列表的括号
, s7 p5 \1 e1 A8 K0 g& x/ g/ ~# E 如上例中可以改成:area a,b,c,w |