已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章子过程和函数,子程序和函数如何编写和使用子程序和函数的作用域VB内部函数介绍,VB模块,模块的两层含义:l工程中的资源:一个应用程序就是一个工程,窗体模块(.frm)、类模块(.cls)、标准模块(.bas)。这是一种高层次的模块划分,它们以独立的文件方式管理。l子程序和函数:一个窗体模块或标准模块也是由一些功能单元组成的,这就是子程序和函数,统称为过程(Procedure)。相对来说这是一种较低层次的模块划分。VB中提供的一些函数(比如上一章的UBound)以及事件过程就是这层含义。,VB文件的内容,每一类型的文件都可以包含过程和通用声明:过程:可以是子过程、函数过程或事件过程。每一种过程都由代码组成。声明:在模块级通用声明部分放置常量、变量、动态链接库等的声明。,窗体模块文件*.frm,工程中的每个窗体都有一个与之相应的窗体模块文件窗体文件中包含:窗体本身及窗体上放置的所有控件的属性设置窗体级变量、常量、类型声明和外部过程的声明所有相关的事件过程及窗体级通用过程说明:同一窗体模块内的通用过程与事件过程可以相互调用若窗体模块内的通用过程被声明为公有的,可以被其它窗体模块或标准模块中的过程调用。调用方法为:窗体名.过程名,如From1.Test。,标准模块文件*.bas,标准模块中的代码可以被工程中的所有模块,包括窗体模块、其它标准模块,所共享。标准模块中包含:通用过程没有事件过程公共或模块级的变量、常量、外部过程和全局过程的声明说明:标准模块存放于独立的文件中,其扩展名为.bas。标准模块中通用过程缺省为公有(Public),即工程中的任一模块均可共享、调用。,类模块文件*.cls,类模块包含用来创建对象的类定义包含类的属性和方法的定义,7.1子过程和函数,模块化的程序设计思想:将程序分解成小的程序模块单元(子程序或函数),每个模块可以实现小的功能目标,它们组合起来实现大一些的功能目标。按层次分解,主程序调用一个或多个下级子程序,这些被调用的子程序又可以调用更下层的子程序。VB中的模块:事件过程(PrivateSub对象名_事件名)Sub过程,又称通用过程,或子过程Function过程,称函数,7.2子过程,VB中的子程序分事件过程和通用过程两类:事件过程事件过程是VB事件驱动编程的重要机制。当VB中的某对象的某个事件被触发时,便自动调用对象的事件过程进行处理。因为事件过程的名称中包含了对象名和事件名,所以程序能够实现自动对应和调用。通用过程除事件过程以外的子程序都称为通用过程,通用过程由程序员自行定义和编写。一般存放到一个标准模块(文件扩展名为.BAS)中。,通用过程,定义和调用通用过程定义Private|PublicStaticSub过程名(参数列表).EndSub参数列表:ByVal参数名As类型,调用CallChangeColor(3)ChangeColor2,事件过程,定义和调用事件过程事件过程是VB事件驱动编程的重要机制。当VB中的某对象的某个事件被触发时,便自动调用对象的事件过程进行处理。定义事件过程使用的是固定格式,不需要人工书写:PrivateSub对象名_事件名(参数列表)事件响应代码EndSub事件过程除了由系统自动来调用之外,也可以将它看作一个普通的子程序在程序中用代码来调用,调用语法没有特殊之处。如:CallcmdAdd_Click,7.3函数,定义和调用函数:定义Private|PublicStaticFunction过程名(参数列表).EndFunction过程的区别:函数有数据类型,即返回值的类型,缺省为Variant给函数名本身赋值,即为返回值如果象调用过程一样调用函数,则放弃返回值,退出子过程和函数,EndSub:退出子过程EndFunction:退出函数可以在子过程体内或函数体内任何位置使用上述语句,用来结束子过程或函数,子过程和函数的参数,VB默认的参数是按地址传递(ByRef),意味着如果过程内的参数值改变了,则调用过程时使用的变量其值也随之改变SubMain()DimxAsIntegerx=1CallTest(x)x的值改变了EndSubPrivateSubTest(numAsInteger)num=num+1EndSub按值传递,则用ByVal关键字,如:,数组作为参数示例,【例】编写子程序,实现在所有学生名单数组中查找给定的名字,输出查找结果。SubFind(oneAsString,all()AsString)DimiAsInteger,maxAsIntegermax=Ubound(all)取数组上界Fori=LBound(all)TomaxIfTrim(one)=Trim(all(i)Then去两端空格比较MsgBox找到啦ExitSub完成查找EndIfNextMsgBox没有找到EndSub,函数的返回值,退出函数之前必须完成返回值的确定,对函数名自身赋一个值,该值就是函数的返回值。函数赋值语句可以出现函数的任意位置,该语句并不代表退出函数。如果没有给定返回值,函数会根据返回值的数据类型自动返回一个缺省值,如数值函数会返回0,字符串函数返回一个零长度字符串(“”)。,函数示例1,【例】编写函数可以实现温度值从华氏转换为摄氏和从摄氏转换为华氏。Functionchange(sourceAsInteger,isCtoFAsBoolean)AsIntegerIfisCtoFThenchange=(source*9/5)+32Elsechange=(source-32)*5/9EndIfEndFunction按下【摄氏-华氏】按钮PrivateSubCommand1_Click()lblResult.Caption=华氏温度=&change(CInt(text1.Text),True)EndSub按下【华氏-摄氏】按钮PrivateSubCommand2_Click()lblResult.Caption=摄氏温度=&change(CInt(text1.Text),False)EndSub,函数示例2,【例】写一个函数,用来确定某年是否是闰年。FunctionisLeapYear(yAsInteger)AsBooleanIfyMod40or(yMod100=0andyMod4000)ThenisLeapYear=FalseElseisLeapYear=TrueEndIfEndFunction按下按钮PrivateSubCommand1_Click()DimyearAsIntegeryear=CInt(text1)IfisLeapYear(year)ThenlblResult=year&年是闰年ElselblResult=year&年不是闰年EndIfEndSub,7.4子过程和函数的作用域,过程定义时使用Private和Public关键字限定过程的作用域。Private:表示该过程是私有的、局部的。只有与该过程处于同一模块文件中的其它过程才可以访问,之外的模块不能使用。Public:表示该过程是公有的、全局的。工程中的所有模块都可以使用它。如果不指定作用域,过程会缺省为Public。编写程序时,一般将一个工程公用的过程集中存放到标准模块文件(.bas)中,并使用Public关键字。,7.5高级用法,函数参数定义为可选项参数中使用Optional关键字函数参数的数量可变参数中使用ParamArray关键字,使用可选参数,可选的参数在调用函数时可以不填写,函数能照常可以工作。SubTest(numAsInteger,OptionalTempAsBoolean)如果不指定,则布尔型参数的默认值为False,字符串型参数的默认值为“”,数值型参数默认值为0可以在参数列表中指定缺省值,如:OptionalTempAsBoolean=True可以用IsMissing函数,判断是否提供了参数,前提是该参数类型为Variant,【例】修改查找姓名的子程序,增加查找起始位置和查找方向。,可选参数示例,可以编写两个查找的子过程,但因为都是查找,模块化设计中通常只定义一个子过程,通过不同的参数来区分修改查找子过程,参数start指定查找起始位置,参数direction为True表示向后正向查找,反之向前查找:SubFind(oneAsString,all()AsString,OptionalstartAsInteger=0,OptionaldirectionAsBoolean=True),DimstuNames()AsString按下【正向查找】按钮PrivateSubCommand1_Click()IftxtPos=thenCallFind(txtName,stuNames)从第1个元素向后查ElseCallFind(txtName,stuNames,CInt(txtPos)从指定元素向后查EndIfEndSub按下【反向查找】按钮PrivateSubCommand2_Click()IftxtPos=thenCallFind(txtName,stuNames,False)从第1个元素向前查ElseCallFind(txtName,stuNames,CInt(txtPos),False)从指定元素向前查EndIfEndSub,可选参数示例,子过程定义如下:SubFind(oneAsString,all()AsString,OptionalstartAsInteger=0,OptionaldirectionAsBoolean=True)DimiAsInteger,minAsInteger,maxAsIntegermin=LBound(all)max=Ubound(all)Ifstartmaxorstart&”)大写Format(“abcde”,”&”)小写Format(“01064884680”,”&-&-&)表示字符,不足补空格&表示字符,不足补0,基本字符串操作,10.字符串比较Like运算符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”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东莞公务员省考考试试题及答案
- 2025年及未来5年市场数据中国重芳烃轻质化行业市场供需格局及投资规划建议报告
- 大学博导转公务员考试试题及答案
- 达州公务员考试面试真题试题及答案
- 崇州定向基层公务员考试试题及答案
- 县城区污水收集与水环境整治项目施工方案
- 册亨县公务员考试真题试题及答案
- 城乡污水处理工程施工方案
- 毕节公务员考试大纲试题及答案
- 机场片区市政配套道路工程初步设计
- GB/T 9442-2010铸造用硅砂
- 溶胶-凝胶法:高均一性、高比表面积催化剂制备
- FZ/T 73009-2021山羊绒针织品
- 纤维化学与物理-第三章蛋白质纤维-蚕丝课件
- 医务处的管理职责课件
- 中医妇科学课件-妊娠病胎漏胎动不安
- 甾体及其苷类-2011课件
- 大健康数据课件
- 新北师大版七年级上册生物 第2单元 生物体的结构 教学课件
- 非物质文化遗产概论:第二章-非遗分类-第七节传统节日类遗产课件
- 粘土心墙专项施工方案
评论
0/150
提交评论