【VB开源代码栏目提醒】:网学会员鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“vb9 - 文化教育”一文,供大家参考学习
第九章 过程9.1 Sub过程9.2 Function过程9.3 参数传递9.4 可选参数与可变参数9.5 对象参数9.6 局部内存分配9.7 Shell函数9.8 应用举例 将程序分割成较小的逻辑部件就可以简化程序设计任务,称这些部件为过程,它们可以变成增强和扩展 Visual Basic 的构件。
VB中有两类过程,一类是内部过程,另—类是外部过程,每类过程又可分为函数过程和事件过程。
内部过程是由系统提供的、不需要用户编写、可直接用过程名调用的程序段。
外部过程是由用户根据自己的需要定义和编写的、可供事件过程多次调用的程序段。
过程的使用,一方面将大的程序分成离散的逻辑单元,方便程序的调试;另一方面,方便了其他的程序或过程的调用。
Visual Basic的应用程序是由过程组成的。
在用Visual Basic
设计应用程序时,除了定义常量和变量外,全部
工作就是编写过程。
VisualBasic 中的过程可以看作是编写程序的功能模块。
从本质上说,使用过程是在扩充Visual Basic的功能。
在前面的各章中,已多次见过事件过程,这样的过程是当发生某个事件(如Click、Load、Change)时,对该事件作出响应的程序段,这种事件过程构成Visual Basic应用程序的主体。
有时候,多个不同的事件过程可能需要使用一段相同的程序
代码,因此可以把这段
代码独立出来,作为一个过程,这样的过程叫做“通用过程”generalprocedure,它可以单独建立,供事件过程或其他通用过程调用。
在Visual Basic中,通用过程分为两类,即子程序过程和函数过程,前者叫做Sub过程,后者叫做Function过程。
此外,Visual Basic也允许用Gosub…Return语句来实现子
程序调用,但它不能作为Visual Basic的过程。
在本章中,将介绍如何在Visual Basic应用程序中使用通用过程。
9.1 Sub过程 Visual Basic提供了子程序过程和函数过程。
为了便于区分,在今后的叙述中,我们把Sub…End Sub 定义的子程序叫做子程序过程或Sub过程,而把由Function…End Function定义的函数叫做函数过程或Function过程。
这一节介绍Sub过程的定义和调用,下一节将介绍Function过程。
1. Sub过程1定义Sub过程 通用Sub过程的结构与事件过程的结构类似。
一般格式如下:StaticPrivatePublicSub 过程名参数表列 语句块 Exit Sub 语句块End Sub 用上述格式可以定义一个Sub过程,例如:Private Sub Subtest Print “This is a Sub procedure”End Sub说明:1 Sub过程以Sub开头,以End Sub结尾,在Sub和End Sub之间是描述过程操作的语句块,称为“过程体”或“子程序体”。
格式中各参量的含义如下:① Static:指定过程中的局部变量在内存中的默认存储方式。
如果使用了Static,则过程中的局部变量就是“Static”型的,即在每次调用过程时,局部变量的值保持不变;如果省略“Static”,则局部变量就默认为“自动”的,即在每次调用过程时,局部变量被初始化为0或空字符串。
Static对在过程之外定义的变量没有影响,即使这些变量在过程中使用。
② Private:表示Sub过程是私有过程,只能被本模块中的其他过程访问,不能被其他模块中的过程访问。
③ Public:表示Sub过程是公有过程,可以在程序的任何地方调用它各窗体通用的过程一般在标准模块中用Public定义,在窗体层定义的通用过程通常在本窗体模块中使用,如果在其他窗体模块中使用,则应加上窗体名作为前缀。
④ 过程名:是一个长度不超过255个字符的变量名,在同一模块中,同一个变量名不能既用作Sub过程名又用作Function过程名。
⑤ 参数表列:含有在调用时传递给该过程的简单变量名或数组名,各名字之间用逗号分隔。
“参数表列”指明了调用时传递给过程的参数的类型和个数,每个参数的格式为: ByVal变量名As数据类型 这里的“变量名”是一个合法的Visual Basic变量名或数组名,如果是数组,则要在数组名后加上一对括号。
“数组类型”指的是变量的类 型 , 可 以是 Integer 、 Long、 Single、 Double、 String、Currency、Variant或用户定义的类型。
如果省略“As数据类型”,则默认 为Variant。
“变量名”前面的“ByVal”是可选的,如果加上“ByVal”,则表明该参数是“传值”((即:为值传递) Passed by Value)参数,没有加“ByVal”(或者加ByRef)的参数称为“引用” (即:为地址传递) (Passed by Reference)参数。
有关参数的传递
问题将在9.3节介绍。
在定义Sub过程时,“参数表列”中的参数称为“形式参数”,简称“形参”,不能用定长字符串变量或定长字符串数组作为形式参数。
不过,可以在调用语句中用简单定长字符串变量作为“实际参数”,在调用Sub过程之前,Visual Basic把它转换为变长字符串变量(2)End Sub标志着Sub过程的结束。
为了能正确运行,每个Sub过程必须有一个End Sub子句。
当程序执行到End Sub时,将退出该过程,并立即返回到调用语句的后继语句。
此外,在过程体内可以用一个或多个Exit Sub语句从过程中退出。
(3)Sub过程不能嵌套。
也就是说,在Sub过程内,不能再定义Sub过程或Function过程;不能用GoTo语句进入或转出一个Sub过程,只能通过调用执行Sub过程,而且可以嵌套调用。
下面是一个Sub过程的例子: Sub Tryoutx As IntegerByVal y As integer xx100 yy6 Print xy End Sub上面的过程有两个形式参数,其中第二个形参的前面有ByVal,表该参数是一个值传递参数。
过程可以有参数,也可以不带任何参数。
没有参数的过程称为无参过程。
例如:Sub ContinueQuery Do ResponseInputBox“ContinueY or N” If Response“N” Or Response“n” Then End If Response“Y” Or Response“y” Then Exit Do LoopEnd Sub上述过程没有参数,当调用该过程时,询问用户是否继续某种操作,回答“Y”继续,回答“N”则结束程序。
对于无参过程,调用时只写过程名即可。
2.建立Sub过程 前几章已涉及如何建立事件过程。
通用过程不属于任何一个事件过程,因此不能放在事件过程中。
通用过程可以在标准模块中建立,可以在窗体模块中建立。
如果在标准模块中建立通用过程,可以使用以下两种方法: 第一种方法,操作步骤如下:(1)执行“工程”菜单中的“添加模块”命令,打开“添加模块对话框,在该对话框中选择“新建”选项卡,然后双击“模块”图标打开模块
代码窗口。
(2)执行“工具”菜单中的“添加过程”命令,打开“添加过程对话框。
如下图所示:图 “添加过程”对话框(3)在“名称”框内输入要建立的过程名字(例如Tryout)。
(4)在“类型”栏内选择要建立的过程的类型,如果建立子程序过 程,则应选择“子程序”;如果要建立函数过程,则应选择“函 数”。
(5)在“范围”栏内选择过程的适用范围,可以选择“公有的”或 “私有的”。
如果选择“公有的”,则所建立的过程可用于本工 程内的所有窗体模块;如果选择“私有的”,则所建立的过程只 能用于本标准模块。
(6)单击“确定”按钮,回到模块
代码窗口。
此时可以在Sub和End Sub之间键入程序
代码(与事件过程的
代码 输入相同)。
第二种方法:执行“工程”菜单中的“添加模块”命令,打开模块
代码窗口,键入过程的名字。
例如,键入“ Sub Tryout()”,按回车键后显示: Sub Tryout() End Sub 即可在Sub和End Sub之间键入程序
代码。
在模块
代码窗口中,通用过程出现在“对象”框的“通用”项目下其名字可以在“过程”框中找到。
过程框中自动加入名字Tryout 模块
代码窗口 如果在窗体模块中建立通用过程,则可双击窗体进入
代码窗口,在“对象”框中选择“通用”,在“过程”框中选择“声明”,直接在窗口内键入“Sub Tryout()”,然后按回车键,窗口内显示: Sub Tryout() End Sub此时即可键入
代码。
直接键入Sub Tryout()但尚未按回车健屏幕显示3. 调用Sub过程调用即为执行过程。
也就是说,要执行一个过程,首先必须调用该过程。
Sub过程的调用有两种方式,一种是使用Call语句,一种是把过程名作为一个独立语句来使用。
1 用Call语句调用Sub过程格式:Call 过程名实际参数Call语句把程序控制传递到一个Visual Basic的Sub过程。
用Call语句调用一个过程时,如果过程本身没有参数,则“实际参数”和括号可以省略;否则应给出相应的实际参数,并把参数放在括号中。
“实际参数”实参是传递给Sub过程的变量或常数。
例如:Call Tryout(ab)2 把过程名作为一个语句来使用在调用Sub过程时,如果省略关键字Call,就成为调用Sub过程的第二种方式。
与第一种方式相比,它有两点不同:(1)去掉了关键字Call;(2)去掉了“实际参数”的括号。
例如: Tryout ab3. 通用过程与事件过程 事件过程也是Sub过程,但它是一种特殊的Sub过程,它附加在窗和控件上。
一个控件的事情过程由控件的实际名字(Name属性)、下划线和事件名组成;而窗体事件过程由“Form”、下划线和事件名组成也就是说,窗体的事件过程不能由用户任意定义,而是由
系统指定控件事件过程的一般格式为: PrivatePublicSub 控件名_事件名(参数表) 语句组 End Sub窗体事件过程的一般格式为: PrivatePublicSub Form_事件名(参数表) 语句组 End Sub 可以看出,除了名字外,控件事件过程与窗体事件过程的格式基本上是一样的。
在大多数情况下,通常是在事件过程中调用通用过程。
实际上,由于事件过程也是过程(Sub过程),因此也可以被其他过程调用(包括事件过程和通用过程)。
通用过程可以放在标准模块中,也可以放在窗体模块中,而事件过程只能放在窗体模块中,不同模块中的过程(包括事件过程和通用过程)可以互相调用。
当过程名唯一时,可以直接通过过程名调用;如果两个或两个以上的标准模块中含有相同的过程名,则在调用时必须用模块名限定,其一般格式为: 模块名.过程名(参数表) 一般来说,通用过程(包括Sub过程、Function过程)之间、事件过程之间、通用过程与事件过程之间,都可以互相调用。