《程序设计基础——visualbasic教程_过程》由会员分享,可在线阅读,更多相关《程序设计基础——visualbasic教程_过程(119页珍藏版)》请在金锄头文库上搜索。
1、,第10章 过程,程序设计基础Visual Basic教程,本章的学习重点和难点,VB程序代码的组织 弄清楚过程调用的程序流程 过程的编写,参数的设置(包含数量、类型、顺序的要求)、参数的传递方式的选用 递归过程的编写、递归过程的调用和回溯过程的理解 变量的作用域问题(局部(过程级、模块级)、全局、静态变量)、作用域不同的变量的同名问题,10.1 VB程序代码的结构化组织,VB的程序代码部分是由若干被称为“过程”的代码行以及向系统提供某些信息的说明组成。其中有针对于某个对象的事件过程,也有用户自定义过程,而这些过程及说明又被组织在不同的“模块”文件之中,10.1 VB程序代码的结构化组织,10
2、.1.1模块 窗体模块:应用程序中的每个窗体都有一个相对应的窗体模块(对应一个代码窗口)。窗体模块不仅包含有用于处理发生在窗体中的各个对象的事件过程,而且包含有窗体及窗体中各个控件对象的属性设置以及相关的说明。如果某些自定义过程仅供本窗体内的其他过程共享,则它也可包含在该窗体模块之中 “窗体模块”对应的文件 窗体文件(扩展名.FRM),10.1 VB程序代码的结构化组织,10.1.1模块 标准模块:在应用程序中可被多个窗体共享的代码,应当被组织到所谓的“标准模块”之中。标准模块文件的扩展名是.BAS。标准模块中保存的过程都是自定义过程。除了这些自定义过程之外,标准模块中还包含有相关的类型说明、
3、数据说明。特别值得一提的是:标准模块中代码不仅能用于一个应用程序,还可供其他应用程序重复使用 类模块:包含用于创建新的对象类的属性、方法的定义等。类模块文件的扩展名是.CLS,10.1 VB程序代码的结构化组织,10.1.2 过程 事件过程Visual Basic程序是由事件驱动的,所以事件过程是Visual Basic 程序中不可缺少的基本过程。为窗体以及窗体上的各种对象编写的用来响应由用户或系统引发的各种事件的代码行就是“事件过程” 事件过程由Visual Basic中的事件调用。也就是说,当指定的事件发生时,该事件过程即会被激活执行 事件过程存储在被称为“窗体模块”的文件中(扩展名.FR
4、M),而且在缺省情况下是Private “私有的”。换言之,事件过程仅在该窗体内有效,10.1 VB程序代码的结构化组织,10.1.2 过程 事件 过程,窗体事件过程:Private Sub Form_事件名(参数列表)局部变量和常数声明语句块End Sub 控件事件过程:Private Sub 控件名_事件名(参数列表)局部变量和常数声明语句块 End Sub,10.1 VB程序代码的结构化组织,10.1.2 过程 事件过程,尽管窗体有各自的名称,但窗体事件过程名由“Form”、下划线和事件名结合而成;如果使用多文档界面(MDI)窗体,则由“MDIForm”、下划线和事件名构成窗件事件过程名
5、 控件事件过程名由控件名、下划线和事件名组成。组成控件事件过程名的控件名必须与窗体中某个控件相匹配,否则VB将认为它是一个自定义过程,10.1 VB程序代码的结构化组织,10.1.2 过程 事件过程,每个事件过程名前都有一个“Private”的前缀,表示该事件过程不能在它自己的窗体模块之外被调用。它的使用范围是模块级的,在该窗体之外是不可见的,也就是说是该窗体私有的或局部的 事件过程有无参数,完全由VB所提供的具体事件本身所决定,用户不可以随意添加,10.1 VB程序代码的结构化组织,10.1.2 过程 自定义过程 结构化编程的原则:“分而治之”,逐步求精的方法,程序设计模块化 一个应用中的多
6、个窗体可以共享一些代码,或者一个窗体内不同的事件过程可共享一些代码,10.1 VB程序代码的结构化组织,10.1.2 过程 自定义过程,通过VB提供的自定义过程将功能模块或某些被重复使用的代码定义成一个个过程,供事件或其他过程多次调用 使用这些过程的好处是使程序结构清晰简练、便于调试和维护 自定义过程分类: 以“Function”保留字开始的函数过程 以“Sub”保留字开始的子程序过程 以“Property”保留字开始的属性过程 以“Event”保留字开始的事件过程,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic F
7、unction 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,Function函数过程应以Function语句开头(注意它与后跟的函数过程名之间至少应该留出一个空格),以End Function语句结束,而中间则是描述函数过程操作的语句,称为函数体,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit
8、 Function 语句块 函数名= 表达式 End Function,函数名的命名规则与变量名的命名规则相同 在同一个模块中,函数过程名必须唯一,不能与模块级变量同名,也不能与调用该函数过程的调用程序中的局部变量同名 在函数体内,可以像使用简单变量一样使用函数名,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,Function过程可通过函
9、数名返回一个值,使用As 数据类型选项,则指定函数返回值的类型;缺省该选项时,函数类型默认为变体(Variant)类型。由于求得的函数值是通过函数名返回给调用程序,因此在函数体内至少有一条“函数名 = 表达式”语句给函数名赋值,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,参数列表中的参数称为形式参数(简称形参),是函数本身与外界调用程序
10、之间交流的窗口或接口,参数本身没有具体的值,仅代表了参数的个数、位置和类型,其初值来源于函数过程调用;形参可以是变量名或数组名,但不能是常量、数组元素或表达式;各参数之间必须用逗号分隔。不含参数的过程称为无参过程,函数名后的这对圆括号不可以省,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,在Function函数的函数体中,一般首先是该函数
11、过程的声明段,声明仅在该函数过程中要用到的变量和常量,通常用Dim或Static语句声明。在函数过程内部说明的量,只在本过程体内有效,程序在调用过程时为这些量开辟存储空间,当退出过程体后,用Dim声明的变量的空间被收回,而Static声明的要等到模块结束时,才被收回空间,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,函数体是由合法的VB语
12、句组成,其中可以含有多个Exit Function语句,程序执行到Exit Function语句时提前退出该过程,返回到调用该函数过程的语句处。 End Function标志Function的结束,当程序执行到End Function语句时,退出该过程,并立即返回调用该函数过程的语句处,继续执行,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Functio
13、n,以Private为前缀的函数过程是模块级的(私有的)函数过程,只能被本模块内的事件过程或其他过程调用 以Public为前缀的函数过程是应用程序级的(公有的或全局的)函数过程,在应用程序的任何模块中都可以调用它。若缺省,系统默认值为Public,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,若在一个窗体模块调用另一个窗体模块中的公有函数
14、过程时,必须以那个窗体名字作为该公有函数过程名的前缀,即以“某窗体名.公有函数过程名”的形式调用公有函数过程 Static选项指定函数过程中的局部变量为“静态”变量。,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 自定义函数过程的格式 Public|PrivateStatic Function 函数名(参数列表)As Type 局部变量或常数定义 语句块 函数名 = 表达式 Exit Function 语句块 函数名= 表达式 End Function,过程的定义是相对独立的,一个过程并不从属于另一个过程,即Function函数过程不能嵌套定义,在函数过程中不可以再定义Sub过
15、程或Function过程。但可以嵌套调用自身或其他过程,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 形参的格式 OptionalByValByRef变量名()As数据类型 变量名():变量名为合法的VB变量名或数组名。若变量名后无括号则表示该形参是变量,否则是数组,注意括号中不包含维数 ByVal:表明其后的形参是按值传递参数或称为“传值”(Passed by Value)参数 ByRef:表明其后的参数是按地址传递(传址)参数或称为“引用”(Passed by Reference)参数,若形式参数前缺省ByVal和ByRef关键字,则这个参数是一个引用参数,10.2 函数过
16、程的定义和调用,10.2.1 函数过程的定义 形参的格式 OptionalByValByRef变量名()As数据类型,Optional:表示该形参是可选参数(就是在调用过程时,可以没有实在参数与它结合) As 数据类型:该选项用来说明形参的类型,若缺省,该形参是“变体型变量”(Variant) 如果形参变量的类型被说明为“String”,它只能是不定长的。而在调用该过程时,对应的实在参数(简称实参)可以是定长的字符串型变量或字符串型数组元素。如果形参是字符串数组,则没有这个限制,10.2 函数过程的定义和调用,10.2.1 函数过程的定义 建立函数过程(方法1) 打开“代码编辑器”窗口; 选择“工具”菜单中的“添加 过程”命令,