《第08章子过程与函数PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第08章子过程与函数PPT讲稿.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第08章子过程与函数第1页,共34页,编辑于2022年,星期日VB模块模块模块的两层含义:模块的两层含义:l l工程中的资源:工程中的资源:一个应用程序就是一个工程,窗体模块(一个应用程序就是一个工程,窗体模块(.frm)、类模块)、类模块(.cls)、标准模块()、标准模块(.bas)。这是一种高层次的模)。这是一种高层次的模块划分,它们以独立的文件方式管理。块划分,它们以独立的文件方式管理。l l子程序和函数:子程序和函数:一个窗体模块或标准模块也是由一些功能单元组成的,这一个窗体模块或标准模块也是由一些功能单元组成的,这就是子程序和函数,统称为过程(就是子程序和函数,统称为过程(Proc
2、edure)。相对来)。相对来说这是一种较低层次的模块划分。说这是一种较低层次的模块划分。VB中提供的一些函中提供的一些函数(比如上一章的数(比如上一章的UBound)以及事件过程就是这层)以及事件过程就是这层含义。含义。第2页,共34页,编辑于2022年,星期日VB文件的内容文件的内容每一类型的文件都可以包含过程和通用声明:每一类型的文件都可以包含过程和通用声明:过程:过程:可以是子过程、函数过程或事件过程。每一种可以是子过程、函数过程或事件过程。每一种过程都由代码组成。过程都由代码组成。声明:声明:在模块级通用声明部分放置常量、变量、在模块级通用声明部分放置常量、变量、动态链接库等的声明。
3、动态链接库等的声明。第3页,共34页,编辑于2022年,星期日窗体模块文件窗体模块文件*.frm工程中的每个窗体都有一个与之相应的窗体模块文件工程中的每个窗体都有一个与之相应的窗体模块文件窗体文件中包含:窗体文件中包含:窗体本身及窗体上放置的所有控件的属性设置窗体本身及窗体上放置的所有控件的属性设置窗体级变量、常量、类型声明和外部过程窗体级变量、常量、类型声明和外部过程的声明的声明所有相关的事件过程及窗体级通用过程所有相关的事件过程及窗体级通用过程说明:说明:同一窗体模块内的通用过程与事件过程可以相互调用同一窗体模块内的通用过程与事件过程可以相互调用若窗体模块内的通用过程被声明为公有的,可以被
4、其它若窗体模块内的通用过程被声明为公有的,可以被其它窗体模块或标准模块中的过程调用。调用方法为:窗体窗体模块或标准模块中的过程调用。调用方法为:窗体名名.过程名,如过程名,如From1.Test。第4页,共34页,编辑于2022年,星期日标准模块文件标准模块文件*.bas标准模块中的代码可以被工程中的所有模块,包括窗体标准模块中的代码可以被工程中的所有模块,包括窗体模块、其它标准模块,所共享。模块、其它标准模块,所共享。标准模块中包含:标准模块中包含:通用过程通用过程没有事件过程没有事件过程公共或模块级的变量、常量、外部过程和全局过程的声明公共或模块级的变量、常量、外部过程和全局过程的声明说明
5、:说明:标准模块存放于独立的文件中,其扩展名为标准模块存放于独立的文件中,其扩展名为.bas。标准模块中通用过程缺省为公有(标准模块中通用过程缺省为公有(Public),即工程中的),即工程中的任一模块均可共享、调用。任一模块均可共享、调用。第5页,共34页,编辑于2022年,星期日类模块文件类模块文件*.cls类模块包含用来创建对象的类定义类模块包含用来创建对象的类定义包含类的属性和方法的定义包含类的属性和方法的定义第6页,共34页,编辑于2022年,星期日子过程和函数子过程和函数VB中的过程:中的过程:事件过程(事件过程(PrivateSub对象名对象名_事件名)事件名)Sub过程,又称通
6、用过程,或子过程过程,又称通用过程,或子过程Function过程,称函数过程,称函数第7页,共34页,编辑于2022年,星期日通用过程通用过程一、定义和调用通用过程一、定义和调用通用过程定义定义Private|PublicStaticSub过程名过程名(参数列表参数列表).EndSub参数列表:参数列表:ByVal参数名参数名As类型类型,调用调用CallChangeColor(3)ChangeColor2第8页,共34页,编辑于2022年,星期日事件过程事件过程二、定义和调用事件过程二、定义和调用事件过程事事件件过过程程是是VB事事件件驱驱动动编编程程的的重重要要机机制制。当当VB中中的的某
7、某对对象象的的某某个个事件被触发时,便自动调用对象的事件过程进行处理。事件被触发时,便自动调用对象的事件过程进行处理。定义事件过程使用的是固定格式,不需要人工书写:定义事件过程使用的是固定格式,不需要人工书写:PrivateSub对象名对象名_事件名事件名(参数列表参数列表)事件响应代码事件响应代码EndSub事事件件过过程程除除了了由由系系统统自自动动来来调调用用之之外外,也也可可以以将将它它看看作作一一个个普普通通的的子子程程序在程序中用代码来调用,调用语法没有特殊之处。如序在程序中用代码来调用,调用语法没有特殊之处。如:CallcmdAdd_Click第9页,共34页,编辑于2022年,
8、星期日函数函数三、定义和调用函数三、定义和调用函数定义定义Private|PublicStaticFunction过程名过程名(参数列表参数列表).EndFunction过程的区别:过程的区别:函数有数据类型,即返回值的类型,缺省为函数有数据类型,即返回值的类型,缺省为Variant给函数名本身赋值,即为返回值给函数名本身赋值,即为返回值如果象调用过程一样调用函数,则放弃返回值如果象调用过程一样调用函数,则放弃返回值第10页,共34页,编辑于2022年,星期日退出子过程和函数退出子过程和函数EndSub:退出子过程:退出子过程EndFunction:退出函数:退出函数可以在子过程体内或函数体内
9、任何位置使用上述语句,可以在子过程体内或函数体内任何位置使用上述语句,用来结束子过程或函数用来结束子过程或函数第11页,共34页,编辑于2022年,星期日子过程和函数的参数子过程和函数的参数VB默认的参数是按地址传递默认的参数是按地址传递(ByRef),意味着如果过程内的参,意味着如果过程内的参数值改变了,则调用过程时使用的变量其值也随之改变数值改变了,则调用过程时使用的变量其值也随之改变SubMain()DimxAsIntegerx=1CallTest(x)x的值改变了的值改变了EndSubPrivateSubTest(numAsInteger)num=num+1EndSub按值传递,则用按
10、值传递,则用ByVal关键字,如:关键字,如:第12页,共34页,编辑于2022年,星期日第13页,共34页,编辑于2022年,星期日数组作为参数示例数组作为参数示例【例例】编写子程序,实现在所有学生名单数组中查找给定的编写子程序,实现在所有学生名单数组中查找给定的名字,输出查找结果。名字,输出查找结果。SubFind(oneAsString,all()AsString)DimiAsInteger,maxAsIntegermax=Ubound(all)取数组上界取数组上界Fori=LBound(all)TomaxIfTrim(one)=Trim(all(i)Then去两端空格去两端空格MsgB
11、ox找到啦找到啦ExitSub完成查找完成查找EndIfNextMsgBox没有找到没有找到EndSub第14页,共34页,编辑于2022年,星期日函数的返回值函数的返回值退出函数之前必须完成返回值的确定,对函数名自身赋一退出函数之前必须完成返回值的确定,对函数名自身赋一个值,该值就是函数的返回值。个值,该值就是函数的返回值。函数赋值语句可以出现函数的任意位置,该语句并不代函数赋值语句可以出现函数的任意位置,该语句并不代表退出函数。表退出函数。如果没有给定返回值,函数会根据返回值的数据类型自如果没有给定返回值,函数会根据返回值的数据类型自动返回一个缺省值,如数值函数会返回动返回一个缺省值,如数
12、值函数会返回0,字符串函数返,字符串函数返回一个零长度字符串回一个零长度字符串(“”)。第15页,共34页,编辑于2022年,星期日函数示例函数示例1【例例】编写函数可以实现温度值从华氏转换为摄氏和从摄氏转换为华氏。编写函数可以实现温度值从华氏转换为摄氏和从摄氏转换为华氏。Functionchange(sourceAsInteger,isCtoFAsBoolean)AsIntegerIfisCtoFThenchange=(source*9/5)+32Elsechange=(source-32)*5/9EndIfEndFunction按下按下【摄氏摄氏-华氏华氏】按钮按钮PrivateSubCo
13、mmand1_Click()lblResult.Caption=华氏温度华氏温度=&change(CInt(text1.Text),True)EndSub按下按下【华氏华氏-摄氏摄氏】按钮按钮PrivateSubCommand2_Click()lblResult.Caption=摄氏温度摄氏温度=&change(CInt(text1.Text),False)EndSub第16页,共34页,编辑于2022年,星期日函数示例函数示例2【例例】写一个函数,用来确定某年是否是闰年。写一个函数,用来确定某年是否是闰年。FunctionisLeapYear(yAsInteger)AsBooleanIfyM
14、od40or(yMod100=0andyMod4000)ThenisLeapYear=FalseElseisLeapYear=TrueEndIfEndFunction按下按钮按下按钮PrivateSubCommand1_Click()DimyearAsIntegeryear=CInt(text1)IfisLeapYear(year)ThenlblResult=year&年是闰年年是闰年ElselblResult=year&年不是闰年年不是闰年EndIfEndSub第17页,共34页,编辑于2022年,星期日子过程和函数的作用域子过程和函数的作用域过程定义时使用过程定义时使用Private和和P
15、ublic关键字限定过程的作用域。关键字限定过程的作用域。Private:表表示示该该过过程程是是私私有有的的、局局部部的的。只只有有与与该该过过程程处处于于同同一一模模块块文文件件中中的的其其它它过过程程才才可可以以访访问问,之之外外的的模模块块不能使用。不能使用。Public:表表示示该该过过程程是是公公有有的的、全全局局的的。工工程程中中的的所所有有模模块块都都可可以以使使用用它它。如如果果不不指指定定作作用用域域,过过程程会会缺缺省省为为Public。编编写写程程序序时时,一一般般将将一一个个工工程程公公用用的的过过程程集集中中存放到标准模块文件(存放到标准模块文件(.bas)中,并使
16、用)中,并使用Public关键字。关键字。第18页,共34页,编辑于2022年,星期日使用可选参数使用可选参数可选的参数在调用函数时可以不填写,函数能照常可以工作。可选的参数在调用函数时可以不填写,函数能照常可以工作。SubTest(numAsInteger,OptionalTempAsBoolean)如果不指定,则布尔型参数的默认值为如果不指定,则布尔型参数的默认值为False,字符串型参数,字符串型参数的默认值为的默认值为“”,数值型参数默认值为,数值型参数默认值为0可以在参数列表中指定缺省值,如:可以在参数列表中指定缺省值,如:OptionalTempAsBoolean=True可以用可
17、以用IsMissing函数,判断是否提供了参数,前提是该函数,判断是否提供了参数,前提是该参数类型为参数类型为Variant第19页,共34页,编辑于2022年,星期日【例例】修改查找姓名的子程序,增加查找起始位置和查找方向。修改查找姓名的子程序,增加查找起始位置和查找方向。可选参数示例可选参数示例可以编写两个查找的子过程,但因为都是查找,模块化设可以编写两个查找的子过程,但因为都是查找,模块化设计中通常只定义一个子过程,通过不同的参数来区分计中通常只定义一个子过程,通过不同的参数来区分修改查找子过程,参数修改查找子过程,参数start指定查找起始位置,参数指定查找起始位置,参数directi
18、on为为True表示向后正向查找,反之向前查找:表示向后正向查找,反之向前查找:SubFind(oneAsString,all()AsString,OptionalstartAsInteger=0,OptionaldirectionAsBoolean=True)第20页,共34页,编辑于2022年,星期日DimstuNames()AsString按下按下【正向查找正向查找】按钮按钮PrivateSubCommand1_Click()IftxtPos=thenCallFind(txtName,stuNames)从第从第1个元素向后查个元素向后查ElseCallFind(txtName,stuNa
19、mes,CInt(txtPos)从指定元素向后查从指定元素向后查EndIfEndSub按下按下【反向查找反向查找】按钮按钮PrivateSubCommand2_Click()IftxtPos=thenCallFind(txtName,stuNames,False)从第从第1个元素向前查个元素向前查ElseCallFind(txtName,stuNames,CInt(txtPos),False)从指定元素向前查从指定元素向前查EndIfEndSub可选参数示例可选参数示例第21页,共34页,编辑于2022年,星期日子过程定义如下:子过程定义如下:SubFind(oneAsString,all()
20、AsString,OptionalstartAsInteger=0,OptionaldirectionAsBoolean=True)DimiAsInteger,minAsInteger,maxAsIntegermin=LBound(all)max=Ubound(all)Ifstartmaxorstart&”)大写大写Format(“abcde”,”&”)小写小写Format(“01064884680”,”&-&-&)表示字符,不足补空格表示字符,不足补空格&表示字符,不足补表示字符,不足补0第31页,共34页,编辑于2022年,星期日基本字符串操作基本字符串操作10.字符串比较字符串比较Lik
21、e运算符运算符IfstrValueLike“AB#”如如“AB123”,“AB097”IfstrValueLike“ABC*XYZ”如如“ABCFDKJKXYZ”IfstrValueLike“1?X”如如“1KKJX”,“1AB3X”IfstrValueLike“A-C#”如如“A432”,“C599”IfstrValueLike“AEIOUA-ZA-Z”如如“ECD”IfstrValueLike“!0-9?如如“D3J”,“ZLJ”第32页,共34页,编辑于2022年,星期日基本字符串操作基本字符串操作11.字符串转换类型字符串转换类型CInt:转换为整型数转换为整型数CLng:转换为长整型
22、数转换为长整型数CSng:转换为单精度浮点数转换为单精度浮点数CDbl:转换为双精度浮点数转换为双精度浮点数CCur:转换为货币转换为货币CDate:转换为日期转换为日期CStr:转换为字符串转换为字符串Chr:Ascii码转换为字符码转换为字符Asc:字符转换为字符转换为Ascii码码第33页,共34页,编辑于2022年,星期日日期操作日期操作1.取当前日期取当前日期Now2.取日期中的年取日期中的年Year3.取日期中的月取日期中的月Month4.取日期中的日取日期中的日Day5.取星期数取星期数Weekday:返回:返回1-7,即,即vbMondayvbSunday第34页,共34页,编辑于2022年,星期日