VB自定义函数与子过程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.2 自定义函数过程
8.2.2 函数过程的定义
函数过程在被调用前,一定要先定义,函数定义的方式一般 有两种: 1.利用“添加过程”对话框定义
打开窗体或模块的代码窗口,单击“工具”菜单,选 择“添加过程”命令,即可打开“添加过程”对话框。
8.2 自定义函数过程
在“添加过程”对话框中输入并选择相应的内容和 项目即可。在“名称”文本框内输入待定义函数过程的名称, 在“类型”选项组中选择“函数”单选按钮。
Print "Va="; Va, "Vb="; Vb
'输出原始值
Call Cp(Va, Vb)
Print "在主调过程中调用子过程后的值"
'输出经子
过程处理过后的返回值
Print "Va="; Va, "Vb="; Vb
End Sub
运行结果:
程序运行后,单击窗体以触发Form_Click()事件过 程,运行结果如下图所示。
For K = 3 To N / 2
'第一个数的取值区间折半
If prime(K) And prime(N - K) Then ‘二次调用结果都是
素数输出
Print I; ":"; N; "="; K; "+"; N - K
Exit For
'退出k循环
End If
Next K
I=I+1
Next N
End Sub
⑤④
3)x和y获得初值后,即可执行函数过程中的程序 ①
代码并给函数过程名赋值,该值即为整个函数过程

的返回值;

4)函数执行结束后,函数的返回值将赋给主调事 件过程的变量s;
⑤④
5)变量s得到赋值后,接着执行调用函数过程后面
的剩余语句。
8.3 子过程的定义和调用
引例 调用函数后,将得到函数的返回值,但是,在有些问
例8.2 设计一个程序统计字符串中西文字符个数。
算法:汉字的Asc()函数的返回值小于0;西文字符的Asc()函数
的返回值大于0。
Function CountXw%(ByVal S$)
Dim I%, T%, K%, C$
For I = 1 To Len(S)
C = Mid(S, I, 1)
'逐个地取出字符
说明
3)[(<形参列表>)]:该项中的参数为形式参数,又称哑元, 可以是变量名或数组名,当参数为数组名时,形参和实参在 参数声明时应省略其维数,但括号()不能省略。当参数有多 项时,参数间要用逗号分隔开。使用格式为[ByVal|ByRef]< 变量名>[As<数据类型>] 4)ByVal:表示调用时参数为值传递方式,实参的值不随形 参值的变化而变化;
第八章 自定义函数与子过程
几个概念
一、VB程序的基本构成是过程。 二、VB6.0中过程有两大类:内部过程和外部过程。 1、内部过程:系统提供的,不需要用户编写,如内部函数。 2、外部过程:用户根据需要定义的,供调用的程序段,外部 过程分为子过程、函数过程。
几个概念
三、在VB中使用过程编程有两个优点: 1、过程可使程序划分成离散的逻辑单元,每个单元都比没有 使用过程的整个程序容易调试。 2、一个程序中的过程,往往不必修改或只需稍作改动,便可 以成为另一个程序的构件。 四、Visual Basic 的两类过程: 1、Sub 过程(子过程),不返回值或多个返回值。 2、Function 过程(函数过程),有一个返回值。
例如: Private Sub Command1_Click()
a=”Visual Basic” b= “6.0” Call Link(a,b) End Sub
此时,将输入的值a和b作为实参调用Link子过程, 通过调用将两个实参传递给形参,然后在过程中计算。
6.2 子过程的定义和调用
例:分别计算两个数的和与差,而当两个数的值均 为0时则不进行任何计算。
Sub Operation(x As Integer , y As Integer) Dim t1 as Integer, t2 as Integer If x =0 and y=0 Then Exit Sub End If t1=x+y t2=x-y Print “t1=”;t1; “t2=”;t2
‘ 调用CountXw函数
Picture1.Print Text1 ' 在Picture1中显示统计的结果
Picture1.Print "有"; C1; "个西文字符数"
End Sub
8.2 自定义函数过程
8.2.3 函数过程的调用
1.函数调用的形式 其调用形式如下:
变量=函数过程名(实参列表)
其中,实参列表中的实参是传递给被调用过程的变量或表达式。 例题8.2中的C1 = CountXw(Text1.Text) 就是一次函数调用。
从程序中可以看到,Va和Vb的初值分别是45和23, 而在窗体中输出时Va和Vb的值分别是23和45,达到了两个数 交换的目的。
8.3 子过程的定义和调用
8.3.1 子过程的定义
子过程以过程名来标识,被其它过程调用。子过程与 事件过程有一定区别,事件过程可以在该事件触发或调用时 执行,而用户自定义的子过程只有在被其它过程调用时才能 执行。
[<语句块1>] [函数名=<表达式>] [Exit Function] [<语句块2>] [函数名=<表达式>] End Function
说明
1)[Public或Private]:表示函数是“公有的”或“私有的”。 Public表示该函数为公有过程,定义后整个程序范围内均可调 用该函数,但调用时必须加上该函数所在的窗体或标准模块作 为前辍,而Private表示私有子过程,用它定义的函数只能在本 窗体或模块中被调用。缺省默认是公有的。 2)[Static]:表示函数中的局部变量是静态变量,在函数被调 用后,其值仍然被保留;
题的中,过程执行结束后不需要返回值,用函数过程实现就会 非常困难,而应该使用子过程的形式。
例8.3 试编写一个将两个数进行交换的过程供其它过 程多次调用。
分析:先编写一个具有将两个数进行交换的子过程,需 要进行两数交换时,调用该子过程,同时将待交换的两个数传 送到该子过程中,在子过程实现两数交换。子过程执行结束后, 将被交换后的两个数返回到主调过程中。
If Asc(C) > 0 Then K = K + 1 '字符ASCII码大于
0,则个数累加1
Next I
CountXw = K '返回函数值
End Function
例8.2 设计一个程序统计字符串中西文字符个数。
Private Sub Command1_Click()
Dim C1%
C1 = CountXw(Text1.Text)
'函数取值False,则x不是素数
Exit Function
'函数结束
End If
Next I
End Function
8.2 自定义函数过程
‘在事件过程中调用以上定义的函数,得到结果。
Private Sub Form_Click()
Dim I%, N, K%
I=1
'计数
For N = 50 To 100 Step 2 '取偶数
个过程时的流程如下图所示。
Function Hypotenuse( x%,y%)
Hypotenuse = Sqr (x ^ 2 + y ^ 2) ①

End Function
Private Sub Command1_Click()

…… s = Hypotenuse(a,b)
⑤④
……
End Sub
函数过程调用的执行流程图
子过程的定义跟函数过程的定义相类似,在代码窗口 中输入Sub及子过程名即可,系统会自动加上End Sub与子过 程名后的一对括号(),然后即可在子过程的框架中输入程 序代码。
子过程的定义格式: [Private|Public][Static] Sub <过程名>[(<参数列表>)]
[<语句块1>] [Exit Sub] [<语句块2>] End Sub ——————————— 说明: [Public]|[Private]与[Static]:它们的含义和作用与函数 过程中相应的这些关键词相同。 [(<参数列表>)]:该项中参数的形式和调用方法也与函数过 程相同。 [Exit Sub]:退出过程,该项一般嵌套在if结构中使用,在 满足if条件时退出该过程。
说明
5)ByRef:参数默认选项,表示参数为地址传递方式,实参 的值随形参值的改变而改变,数组只能以传地址的方式引用;
6) As <类型>表示函数返回值的类型,默认为变体型。在 函数体内至少应对对函数名赋值一次。
7) [函数名=<表达式>],用于函数运行后返回一个值。如 在定义中未对函数名赋值,则将返回一个默认值。其中,数 值型为0,字符型为“”,变量型为Empty。 8) [Exit Function]用于退出函数过程,该项一般嵌套在 if结构中使用,在满足if条件时退出该函数过程。
End Subຫໍສະໝຸດ 6.2 子过程的定义和调用
在Sub 过程与Function 过程之间的区别:
1)子过程名无类型说明,在子过程中不能对子过程
名进行赋值。
2) 子过程的形式参数没有具体的值,只代表
参数的个数、位置、类型。
3)子过程的调用必须是一条独立的语句。
8.3 子过程的定义和调用
8.3.2 子过程的调用
单击确定按钮,则可建立一个函数过程的框架 。
8.2 自定义函数过程
2.直接在代码窗口定义
进入代码窗口后,在左侧显示对象名的下拉列表框 中选择“(通用)”,在右侧显示过程的下拉列表框中选
择“(声明)”,然后输入Function及函数名即可。
自定义函数过程的格式如下: [Public| Private][Static]Function<函数名>[(<形参列表 >)][As<类型>]
8.2 自定义函数过程
Private Function prime(ByVal x As Integer) As
Boolean
Dim I%
prime = True
'函数赋初值True
For I = 2 To Sqr(x)
If x Mod I = 0 Then '判断x是否可被i整除
prime = False
End Sub
‘主调程序Cp子过程
Private Sub Command1_Click()
Dim Str1$, Va%, Vb%
Str1$ = "输入对话框"
Va = InputBox("Va=", Str1$)
Vb = InputBox("Vb=", Str1$)
Print "在主调过程中调用子过程前的值"
8.2 自定义函数过程
例8.1 设计程序将[50,100]区间内的偶数拆成两 个素数之和
分析:可先将偶数拆分成两个数之和,在分别对这两个 数进行素数判定,若都是素数就输出。例如:可将50拆 分为:3+47、4+46、….. 47+3,然后对每种组合中的两 个数分别进行素数判断。
因此,可以定义一个专门用于素数判断的 函数过程。
过程调用时执行顺序如下: 1)事件过程Command1_Click()在执行到函数过程 调用语句“s = Hypotenuse(a,b)”时,程序执行 控制权转移到Hypotenuse()函数过程中; 2)执行控制权转移时,实参a和b的值将分别传递 给Hypotenuse()函数中的形参x和y;
① ② ③
‘Cp()子过程的定义
Private Sub Cp(A As Integer, B As Integer) '形参为
传址方式
If A = 0 Then
Exit Sub
End If
A=A+B
'A和B的值交换,带回主调过程
B=A-B
A=A-B
Print "在子过程中交换后的值"
Print "A="; A, "B="; B
1.使用Call语句调用 格式:Call 子过程名[(实参列表)] 说明: ① 实参的个数,数据类型都应与被调用过程的形参一一对应。
用Call语句调用时,若有实参,括号不能省略,
否则,可以省略括号。 ② 若子过程要通过实参向主调过程中返回值,则实参只能是 简单变量、数组名或自定义类型变量。
8.3 子过程的定义和调用
注意:调用函数后,函数过程名将有一个返回值,函数是
一个特殊的表达式。因此,函数不能作为单独的一条语句,而 必须要以给变量赋值或与命令一起使用的形式。
例如: If prime(K) And prime(N - K) Then
8.2 函数过程的定义和调用
2.函数过程调用的执行流程 在事件过程调用一个函数过程时,程序在执行这两
相关文档
最新文档