本章的学习要点
Sub过程
Sub过程的建立调用 Sub过程调用过程和事件过程
Funtion过程
Funtion过程的定义调用 Funtion过程
参数传送形参与实参传送引用传送传值传送数组传送第 10章 过程结构化的程序中,经常将一个较大的程序划分成若干个较小的程序模块,每个模块只完成一个或若干个功能。
这些模块通过执行一系列语句完成一个特定的操作,称为
“过程”。
程序中使用过程 的好处,
过程可使大程序分解成多个逻辑单元,容易编写、调试。
一个程序中的过程可以为另一个程序使用。
VB中过程分为两类,子程序过程 (Sub过程 )和函数过程
(Function过程 )。
Sub过程 (子过程 ):完成一定的操作和功能,无返回值,通过程序调用和事件触发而执行,分为 事件过程和 通用过程 。
Function过程 (函数过程 ):相当于用户自定义的函数,通过程序调用才能被执行,并且可将数据处理的结果返回 。
概 述
1,事件过程特点:
1) 这类过程 与对象有关,对象事件触发后被调用 。
2) 事件过程的过程名由系统自动指定 。
建立对象的事件过程:
1) 进入代码窗口
2)选择,对象,和,事件过程,,系统自动形成该事件过程的头和尾
3) 编写该事件的程序代码
“对象”
“事件过程”
10.1 Sub过程
2,通用 Sub过程特点:
1)这类过程与对象无相关,是用户创建的一段 共享代码 。
2)过程的名称由用户自己来命名。
建立通用 Sub过程:
1) 建立过程框架方法 1:在模块的,通用,段中输入过程名,按回车后系统自动添加 End Sub。
方法 2:,工具 → 添加过程,
2) 编写该过程的程序代码
10.1 Sub过程格式:
[Private |Public][Static] Sub <过程名 >[(<形参表列 >)]
[<语句块 1>]
[Exit Sub]
[<语句块 2>]
End Sub
10.1 Sub过程其中:
[Pubic或 Private],Pubic过程可在整个程序范围内被调用,
而 Private过程只能在本窗体或模块中被调用。
[Static]:表示过程中的局部变量是静态变量,在调用过程结束后,其值仍然被保留。
过程名,是该过程的唯一名字,命名规则如变量
<形参表 >它指明了从调用过程传送给子过程的变量个数及数据类型,之间用逗号分隔,如,(a,b,x)。 <形参表 >中出现的参数称为形式参数,简称形参。
10.1 Sub过程形参 并不代表一个实际存在的变量,也没有固定的值。
它完全由调用过程的程序决定其内容,只是一个“形式上的变量参数”。只在被调用时被一确定的值代替,故形参的名字并不重要,重要的是其表示的对应关系和调用时所给定的实际参数。
[Exit Sub]:退出过程。一个计算圆面积和周长的过程 (sr):
Private Sub sr(a,c,b) ’ r→ a,c→ Area
Const pi = 3.1416
c = a * a * pi ’ 计算面积
b = 2*pi*a ’ 计算周长
End Sub
10.1 Sub过程通用过程的调用
1.使用 Call语句调用格式,Call 过程名 [<实参表列 >]
<实参表 >是实际参数列表,参数之间用逗号分隔。 实参的作用是,将使用中的实际值传送给被调用过程中的形参,供其计算;或从过程中接收经过程计算的结果,实现数据传递。
实参的 个数,数据类型 都应与被调用过程的形参 一一对应 。如无参数,可以省略()。
10.1 Sub过程一个 调用 计算圆面积及周长过程 (sr)的
Private Sub Command1_Click()
Dim r,a,s As Single
r = Val(InputBox("输入半径 R"))
Call sr(r,a,s)
Print,Print,Print
Print,半径,"; r
Print,面积,"; a
Print,周长,"; s
End Sub
计算圆面积和周长的子过程:
Private Sub sr(a,c,b)
Const pi = 3.1416
c = a * a * pi ’计算面积
b = 2*pi*a ’计算周长
End Sub
10.1 Sub过程
2.直接使用过程名调用格式:过程名 [实参 [,实参 ]?]
Private Sub Command1_Click()
Dim r,a,s As Single
r = Val(InputBox("输入半径 R"))
sr r,a,s
Print,Print,Print
Print,半径,"; r
Print,面积,"; a
Print,周长,"; s
End Sub
10.1 Sub过程函数也属于过程。它与子过程的 根本区别 是可以返回 一个值 给调用程序。其定义方法同过程相似,也有两种。
1.利用“添加过程”对话框定义打开窗体或模块的代码窗口,单击“工具”菜单,选择
“添加过程”,然后在对话框的“类型”中选择“函数”即可。
2.直接在代码窗口定义进入代码窗口后,在左侧显示对象名的下拉列表框中选择“通用”,在右侧显示过程的下拉列表框中选择“声明”,
然后输入 Function及函数名即可。
10.2 函数过程格式:
Function<函数名 >( [<形参表列 >]) [As<类型 >]
[<语句块 1>]
[函数名 =<表达式 >]
[Exit Function]
[<语句块 2>]
[函数名 =<表达式 >]
End Function
可以在 Function前加上 Public|Private|Static表示作用范围。
如,Private Function area(a) As Single
10.2 函数过程一个计算圆面积的函数过程 (farea):
Private Function farea(a) As Single ’ r→a
Const pi = 3.1416
farea = a * a * pi ’ 计算面积
End Function
函数通过函数名返回计算值,子过程通过形参返回计算值 。
10.2 函数过程函数的调用
1.使用 Call语句调用如函数名为 farea,则可用命令:
Call farea(r) 调用该函数。
但用这种方法调用函数时,没有返回值。
2.使用函数名调用如函数名为 farea,也可用命令:
farea r 调用该函数。
这种方法调用函数时,同样没有返回值。
10.2 函数过程一个调用计算圆面积的函数过程 (farea)
Private Sub Command1_Click()
Dim r As Single
r = Val(InputBox("输入半径 R"))
Print "半径,"; r
Print "圆面积,"; Int(farea(r) * 10) / 10
End SubPrivate Function farea(a) As Single ’r→ a
Const pi = 3.1416
farea = a * a * pi ’计算面积
End Function
10.2 函数过程在 Sub,Function过程中参数列表的参数称为 形参 。程序中调用 Sub,Function过程时,参数列表中的参数为 实参 。
实参的次序与形参的次序应匹配且一一对应。
即,Call mysub(a,b(),c) ’ (a→ x,b→ y,c→ z)
如,Sub过程中
Private Sub mysub(x as Integer,y()as
double,z as String)
10.3 过程参数
VB中参数传递有 值传递 和 地址传递 两种方式。
1) 值传递 (ByVal),实参与形参通过直接传送数据值的方式传递数据。因为被调用的子过程中的形参没有直接访问实参地址中的原始数据,因而也就不能修改实参的数据。
在值 传递 方式中,对形参的修改不会影响实参数据 。
10.3 过程参数
2) 地址传递 (ByRef),实参与形参的数据传递,以传送数据地址方式进行,是实参与形参传送的 默认方式 。
实参的数据值存放在内存的某个地址中,当调用某子过程时,将实参的地址传递给形参。这样,在被调用的子过程中,即可通过该地址获得实参的数据。同时,在该 子过程 中对形参数据的修改,实际上也是对实参地址上数据的修改。
地址传递方式中,对形参数据的修改就是对实参数据的修改 。
10.3 过程参数传送方式的选择地址传递方式的效率比值传递方式高,但形参并不是一个真正的局部变量,有可能使计算的数据产生不可预见的错误。
值 传递 方式的效率虽然较低,但形参是一个真正的局部变量,其计算的数据可预见程度较高。
10.3 过程参数
Private sub command1_click()
dim m as integer,n as integer
m=15:n=20
call change(m,n)
Print "m="; m,"n="; n
End sub
Private sub change(byval x as integer,byval y
as integer)
x=x+20
y=x+y
Print "x="; x,"y="; y
End sub
x as integer,byval y as
integer)
运行结果
X=35 y=55
M=15 n=20
运行结果
3
参数传递示例