《子程序与函数过程讲稿.ppt》由会员分享,可在线阅读,更多相关《子程序与函数过程讲稿.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、子程序与函数过程子程序与函数过程第一页,讲稿共三十五页哦过程概述过程概述在在VB5.0/6.0中,除了系统提供的内部函数过程和中,除了系统提供的内部函数过程和事件过程外,用户可自定义过程下列四种过程:事件过程外,用户可自定义过程下列四种过程:n n“Sub”保留字开始的为子过程保留字开始的为子过程保留字开始的为子过程保留字开始的为子过程n n“FunctionFunction”保留字开始的为函数过程保留字开始的为函数过程保留字开始的为函数过程保留字开始的为函数过程n n“Property”“Property”保留字开始的为属性过程保留字开始的为属性过程保留字开始的为属性过程保留字开始的为属性过
2、程n n“Event”“Event”保留字开始的事件过程保留字开始的事件过程保留字开始的事件过程保留字开始的事件过程第二页,讲稿共三十五页哦9.1子函数过程(子函数过程(sub过程)过程)在在VB中,的中,的Sub子过程分为:子过程分为:事件过程和通用过程事件过程和通用过程9.1.1事件过程事件过程(1)窗体事件的语法)窗体事件的语法Private Sub Form_事件名事件名(参数列表参数列表)语句组语句组End Sub(2)控件事件的语法)控件事件的语法PrivateSub控件名控件名_事件名事件名(参数列表参数列表)语句组语句组 End Sub第三页,讲稿共三十五页哦9.1子函数过程(
3、子函数过程(sub过程)过程)9.1.2通用过程(通用过程(Sub过程)的定义过程)的定义子过程的定义形式如下:子过程的定义形式如下:Public|PrivateStatic Sub 子过程名子过程名(形参表形参表)语句组语句组 Exit Sub 语句组语句组End Sub说说明明:(1)子子过过程程名名:命命名名规规则则与与变变量量名名规规则则相相同同。子子过过程程名名不不返返回回值值,而而是是通通过过形形参参与与实实参参的的传传递递得得到到结结果果,调调用用时时可可返回多个值。返回多个值。第四页,讲稿共三十五页哦(2)形形式式参参数数列列表表:形形式式参参数数通通常常简简称称“形形参参”,
4、仅仅表表示示形形参参的的类类型型、个个数数、位位置置,定定义义时时是是无无值值的的,只只有有在在过过程程被被调调用用时时,虚虚实实参结合后才获得相应的值。参结合后才获得相应的值。(3)过程可以无形式参数,但括号不能省。过程可以无形式参数,但括号不能省。(4)参数的定义形式:参数的定义形式:ByValByRef变量名变量名()As 类型类型,,ByVal表示当该过程被调用时,参数是按值传递的;缺省或表示当该过程被调用时,参数是按值传递的;缺省或ByRef表示当该过程被调用时,参数是按地址传递的。表示当该过程被调用时,参数是按地址传递的。9.1子函数过程(子函数过程(sub过程)过程)第五页,讲稿
5、共三十五页哦9.1子函数过程(子函数过程(sub过程)过程)例例编一个交换两个整型变量值的子过程。编一个交换两个整型变量值的子过程。Private Sub Swap(X As Integer,Y As Integer)Dim temp As Integer Temp=X:X=Y:Y=TempEnd SubPrivate Sub command1_click()Dim a%,b%a=val(inputbox(“a=“)b=val(inputbox(“b=“)print“a=“;a,”b=“,b call swap(a,b)print“a=“;a,”b=“,bEnd Sub第六页,讲稿共三十五页哦
6、9.1子函数过程(子函数过程(sub过程)过程)9.1.3子过程的建立子过程的建立通通过过“工工具具”菜菜单单中中的的“添添加加过过程程”命命令令,出出现现“添添加加过过程程”对对话话框框(见见图图6.1),选选择择过过程程类类型型(子子过过程程、函函数数、属属性性、事事件件)及及作作用用范范围围(公公有有的的Public、私私有有的的Private),单单击击确确定定后后得得到一个过程或函数定义的结构框架(模板),如:到一个过程或函数定义的结构框架(模板),如:Public Sub Sort()End Sub第七页,讲稿共三十五页哦9.1子函数过程(子函数过程(sub过程)过程)9.1.4过
7、程的调用过程的调用1子过程的调用子过程的调用子过程名子过程名参数列表参数列表或或Call子过程名子过程名(参数列表参数列表)说明:说明:(1)参数列表参数列表称为实参或实元,它必须与形参保持个数相同,称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形)调用时把实参值传递给对应的形参。其中值传递(形参前有参前有ByVal说明)时实参的值不随形参的值变化而改变。而地说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。址传递时实参的值随形参值的改变而改变。第八页,讲稿共三十五页哦(3)当
8、参数是数组时,形参与实参在参数声明时应省略其维数,)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。但括号不能省。(4)调用子过程的形式有两种,用)调用子过程的形式有两种,用Call关键字时,实参必须加圆关键字时,实参必须加圆括号括起。括号括起。例:调用上面定义的例:调用上面定义的Swap子过程的形式:子过程的形式:Swap a,b (省略关(省略关键键字字call和括号)和括号)Call Swap(a,b)9.1子函数过程(子函数过程(sub过程)过程)第九页,讲稿共三十五页哦过程调用的执行过程:过程调用的执行过程:PrivateSubCmdOK()CallSwap(a,b
9、)Swapa,bEndSubPrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub第十页,讲稿共三十五页哦实例实例9.3 窗体中有1个图片框和3个命令按钮(控件数组),如图。程序运行时,单击命令按钮,在图片框中画出指定数目的同心圆。第十一页,讲稿共三十五页哦9.2函数过程(函数过程(Function过程)过程)VisualBasic函数分为内部函数(函数分为内部函数(sin(),(),sqr()等)和外部()等)和外部函数,外部函数是用户根据需要用函数,外部函数是用户根据需要用Function关键字定义的函数过关键字定义的函数过程,程,与子过程不同
10、的是函数过程将返回一个值与子过程不同的是函数过程将返回一个值。9.2.1函数过程(函数过程(Function过程)的定义过程)的定义Public|PrivateStaticFunction 函数名函数名()As 函数名函数名=返回值返回值 Exit Function 函数名函数名=返回值返回值 End Function函数体第十二页,讲稿共三十五页哦9.2函数过程(函数过程(Function过程)过程)说明:说明:(1)函数名:函数名:命名规则与变量名规则相同。命名规则与变量名规则相同。(2)在在函函数数体体内内,函函数数名名可可以以当当变变量量使使用用,函函数数的的返返回回值值就就是是通通过
11、过对对函数名的赋值语句来实现的,函数名的赋值语句来实现的,在函数过程中至少要对函数名赋值一次。在函数过程中至少要对函数名赋值一次。(3)AS类类型型:是是指指函函数数返返回回值值的的类类型型,若若省省略略,则则函函数数返返回回变变体体类型值(类型值(Variant)。)。(4)ExitFunction:表表示示退退出出函函数数过过程程,常常常常是是与与选选择择结结构构(If或或SelectCase语句)联用,即当满足一定条件时,退出函数过程。语句)联用,即当满足一定条件时,退出函数过程。(5)形参数列表形参数列表:形参的定义与子过程完全相同。:形参的定义与子过程完全相同。第十三页,讲稿共三十五
12、页哦实例实例9.5 定义一个函数过程,用来计算1n的和。Private Function sum(n As Integer)As Long for i=1 to n s=s+i next i sum=s End Function第十四页,讲稿共三十五页哦 调调用用函函数数过过程程可可以以由由函函数数名名带带回回一一个个值值给给调调用用程程序序,被被调调用用的的函函数数必必须须作作为为表表达达式式或或表表达达式式中中的的一一部部分分,再再与与其其它它的的语语法法成成分分一一起起配配合合使使用用。因因此此,与与子子过过程程的的调调用用方方式不同,函数不能作为单独的语句加以调用。式不同,函数不能作为
13、单独的语句加以调用。最最简简单单的的情情况况就就是是在在赋赋值值语语句句中中调调用用函函数数过过程程,其其形形式为:式为:变量名变量名=函数过程名(实参列表)函数过程名(实参列表)9.2函数过程(函数过程(Function过程)过程)9.2.2函数的调用函数的调用第十五页,讲稿共三十五页哦实例实例9.6 通过函数过程实现实例9.4的功能。第十六页,讲稿共三十五页哦9.3参数传递参数传递 在在调调用用过过程程时时,一一般般主主调调过过程程与与被被调调过过程程之之间间有有数数据据传传递递,即即将将主主调调过过程程的的实实参参传传递递给给被被调调过过程程的的形形参参,完完成成实实参参与与形形参参的的
14、结结合合,然然后后执执行行被被调调过过程程体体。在在VBVB中中,实实参参与与形形参参的的结结合合有有两两种种方方法法:传传址址和和传传值值。传传 址址 是是 默默 认认 的的 方方 法法。两两 种种 结结 合合 方方 法法 的的 区区 分分 标标 志志 是是“ByValByVal”,形形参参前前加加“ByValByVal”关关键键字字时时是是传传值值,否否则则为为传址。传址。第十七页,讲稿共三十五页哦9.3.1传值传值 传值的参数传递过程是:当调用一个过程时,系统将实参的值复制给形参,之后实参与形参便断开了联系。被调过程对形参的操作是在形参自己的存储单元中进行,当过程调用结束时,这些形参所占
15、用的存储单元也同时被释放。因此在过程中对形参的任何操作都不会影响到实参。第十八页,讲稿共三十五页哦9.3.2传址传址 传址的参数传递过程是:当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,因此实参的值就会随形参的改变而改变。当参数是字符串或数组时,使用传址传递直接将实参的地址传递给过程,会使程序的效率提高。第十九页,讲稿共三十五页哦9.3.3数组参数的传递数组参数的传递 数组可以作为过程的参数。过程定义时,形参列表中的数组用数组名后的一对空的圆括号表示。在过程调用时,实际参数表中的数组可以只用数组名表示,省略圆括号。当用数组作为过程的参数
16、时,进行的不是“值”的传递,而是“址”的传递。第二十页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域前面我们介绍了前面我们介绍了VBVB应用程序(通常称为工程)的组织结构,它由应用程序(通常称为工程)的组织结构,它由窗体模块、标准模块和类模块窗体模块、标准模块和类模块组成。组成。VBVB程序代码就保存在窗体模块文程序代码就保存在窗体模块文件件(.Frm.Frm)、标准模块文件)、标准模块文件(.Bas.Bas)或类模块文件或类模块文件(.Cls.Cls)中。中。它们形成了工程的一种模块层次结构,如下图所示。它们形成了工程的一种模块层次结构,如下图所示。第二十一页,讲稿共三十五页
17、哦9.4 过程与变量的作用域过程与变量的作用域9.4.1窗体模块窗体模块(文件扩展名为文件扩展名为.FRM)窗窗体体模模块块。窗窗体体模模块块可可以以包包含含处处理理事事件件的的过过程程、通通用用过过程程以以及及变变量量、常常数数、类类型型和和外外部部过过程程的的窗窗体体级级声声明明。如如果果要要在在文文本本编编辑辑器器中中观观察察窗窗体体模模块块,则则还还会会看看到到窗窗体体及及其其控控件件的的描描述述,包包括括它它们们的的属属性性设设置置值值。写写入入窗窗体体模模块块的的代代码码是是该该窗窗体体所所属属的的具具体体应应用用程程序序专专用用的的;它它也也可可以引用该应用程序内的其它窗体或对象
18、。以引用该应用程序内的其它窗体或对象。第二十二页,讲稿共三十五页哦9.4.2标准模块标准模块(文件扩展名为文件扩展名为BAS)它它们们可可以以包包含含变变量量、常常数数、类类型型、外外部部过过程程和和全全局局过过程程的的全全局局(在在整整个个应应用用程程序序范范围围内内有有效效的的)声声明明或或模模块块级级声声明明。写写入入标标准准模模块块的的代代码码不不必必绑绑在在特特定定的的应应用用程程序序上上,则则在在许多不同的应用程序中可以重用标准模块。许多不同的应用程序中可以重用标准模块。9.4 过程与变量的作用域过程与变量的作用域第二十三页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作
19、用域9.4.3类模块类模块(文件扩展名为文件扩展名为.CLS)在在VisualBasic中中类类模模块块是是面面向向对对象象编编程程的的基基础础。可可在在类类模模块块中中编编写写代代码码建建立立新新对对象象。这这些些新新对对象象可可以以包包含含自自定定义义的的属属性性和和方方法法。实实际际上上,窗窗体体正正是是这这样样一一种种类类模模块块,在在其其上上可可安安放放控控件,可显示窗体窗口。件,可显示窗体窗口。第二十四页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域概念概念Public|Private Sub 子过程名子过程名(形式参数列表形式参数列表).EndSub通通用用子子过
20、过程程和和函函数数过过程程既既可可写写在在窗窗体体模模块块中中也也可可写写在在标标准准模模块块中中,在在定定义义时时可可选选用用关关键键字字PrivatePrivate(局局部)部)和和PublicPublic(全局),(全局),来决定它们能被调用的范围。来决定它们能被调用的范围。第二十五页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域按过程的作用范围来划分,过程可分为:按过程的作用范围来划分,过程可分为:模块级过程模块级过程全局级过程全局级过程1、窗体窗体/模块级过程:模块级过程:加加Private关键字的过程,只能被定义的窗体或模关键字的过程,只能被定义的窗体或模块中的过程
21、块中的过程调用。调用。2、全局级过程:全局级过程:加加Public关键字关键字(或缺省)(或缺省)的过程,可供该应用程序的所有的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。窗体和所有标准模块中的过程调用。第二十六页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域总结归纳过程的定义及作用域如下表总结归纳过程的定义及作用域如下表第二十七页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域概述:概述:在在VB中中,由由于于可可以以在在过过程程中中和和模模块块中中声声明明变变量量,根根据据定义变量的位置和定义变量的语句不同,变量可以分为:定义变量的位置和定义变量
22、的语句不同,变量可以分为:局部变量局部变量(过程级变量)(过程级变量)窗窗体体/模模块块级级变变量量(私私有有的的模模块块级级变变量量,能能被被本本模模块块的的所所有过程和函数使用)有过程和函数使用)全局级变量全局级变量(公有的模块级变量)。(公有的模块级变量)。第二十八页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域9.4.4过程级变量过程级变量局部变量局部变量局部变量:局部变量:在过程内用声明的变量,只能在本过程在过程内用声明的变量,只能在本过程中使用。中使用。在过程内部使用在过程内部使用Dim或者或者Static关键字来声明的关键字来声明的变量,只在声明它们的过程中才能被
23、访问或改变该变量变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。明相同名字的局部变量而互不影响。第二十九页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域例:例:PrivateSubForm_Load()Dimn%n=10EndSubPrivateSubFrom_Click()Dimn%Print“n=“;nEndSub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?第三十页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变
24、量的作用域9.4.5窗体窗体/模块级变量模块级变量窗窗体体/模模块块级级变变量量:在在“通通用用声声明明”段段中中用用Dim语语句句或或用用Private语语句句声声明明的的变变量量,可可被被本本窗窗体体/模模块块的的任任何何过过程程访问。但其他模块却不能访问该变量。访问。但其他模块却不能访问该变量。例例如如:在在“通通用用声声明明”段段声声明明如如下下变变量量:PrivatesAsStringDimaAsInteger例:例:Dimn%PrivateSubForm_Load()n=10EndSubPrivateSubFrom_Click()Print“n=“;nEndSub第三十一页,讲稿共
25、三十五页哦9.4 过程与变量的作用域过程与变量的作用域9.4.6全局变量全局变量全全局局变变量量也也称称公公有有的的模模块块级级变变量量,在在窗窗体体模模块块或或标标准准模模块块的的顶顶部部的的“通通用用”声声明明段段用用Public关关键键字字声声明明,它它的的作作用用范范围围是是整整个个应应用用程程序序,即即可可被被本本应应用用程程序序的的任任何何过过程程或函数访问。或函数访问。例如:例如:PublicaAsInteger,bAssingle第三十二页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域3种变量声明及使用规则如下表:种变量声明及使用规则如下表:第三十三页,讲稿共三
26、十五页哦9.4 过程与变量的作用域过程与变量的作用域9.4.7静态变量(静态变量(static)概念概念除作用域之外,变量还有存活期,在这一期间变量能够保持它除作用域之外,变量还有存活期,在这一期间变量能够保持它们的值。们的值。在应用程序的存活期内一直保持在应用程序的存活期内一直保持模块级变量模块级变量和和全局变量全局变量的值。的值。但是,对于但是,对于Dim声明的局部变量声明的局部变量仅当过程执行期间存在,当一个过仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的变量所占据的内存也被释放内存也被释放。当下一次
27、执行该过程时,它的所有局部变量将重新。当下一次执行该过程时,它的所有局部变量将重新初始化。初始化。局部变量的存活期由其定义的关键词来决定。局部变量的存活期由其定义的关键词来决定。第三十四页,讲稿共三十五页哦9.4 过程与变量的作用域过程与变量的作用域局部变量声明:局部变量声明:Dim声明:声明:随过程的调用而分配存贮单元,变量的初始化;过程随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。体结束,变量的内容自动消失,存贮单元释放。Static声明声明,每次调用过程,变量保持上次调用结束时的值。,每次调用过程,变量保持上次调用结束时的值。声明形式:声明形式:Static变量名变量名AS类型类型StaticFunction函数过程名函数过程名(参数列表参数列表)As类型类型StaticSub子过程名子过程名(参数列表参数列表)注意:过程名前加注意:过程名前加Static,表示该过程内的局部变,表示该过程内的局部变量都是静态变量。量都是静态变量。第三十五页,讲稿共三十五页哦