第07章VB子过程与函数

上传人:熏** 文档编号:243132975 上传时间:2024-09-16 格式:PPT 页数:37 大小:220.50KB
返回 下载 相关 举报
第07章VB子过程与函数_第1页
第1页 / 共37页
第07章VB子过程与函数_第2页
第2页 / 共37页
第07章VB子过程与函数_第3页
第3页 / 共37页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,第七章 子过程和函数,子程序和函数,如何编写和使用,子程序和函数的作用域,VB,内部函数介绍,VB,模块,模块的两层含义:,l,工程中的资源:,一个应用程序就是一个工程,窗体模块(,.,frm,)、,类模块(,.,cls,)、,标准模块(,.bas,)。,这是一种高层次的模块划分,它们以独立的文件方式管理。,l,子程序和函数:,一个窗体模块或标准模块也是由一些功能单元组成的,这就是子程序和函数,统称为过程(,Procedure,)。,相对来说这是一种较低层次的模块划分。,VB,中提供的一些函数(比如上一章的,UBound,),以及事件过程就是这层含义。,VB,文件的内容,每一类型的文件都可以包含过程和通用声明:,过程:,可以是子过程、函数过程或事件过程。每一种过程都由代码组成。,声明:,在模块级通用声明部分放置常量、变量、动态链接库等的声明。,窗体模块文件*,.,frm,工程中的每个窗体都有一个与之相应的窗体模块文件,窗体文件中包含:,窗体本身及窗体上放置的所有控件的属性设置,窗体级变量、常量、类型声明和外部过程 的声明,所有相关的事件过程及窗体级通用过程,说明:,同一窗体模块内的通用过程与事件过程可以相互调用,若窗体模块内的通用过程被声明为公有的,可以被其它窗体模块或标准模块中的过程调用。调用方法为:窗体名,.,过程名,如,From1.Test,。,标准模块文件*,.bas,标准模块中的代码可以被工程中的所有模块,包括窗体,模块、其它标准模块,所共享。,标准模块中包含:,通用过程,没有事件过程,公共或模块级的变量、常量、外部过程和全局过程的声明,说明:,标准模块存放于独立的文件中,其扩展名为,.bas,。,标准模块中通用过程缺省为公有(,Public,),,即工程中的任一模块均可共享、调用。,类模块文件*,.,cls,类模块包含用来创建对象的类定义,包含类的属性和方法的定义,7.1,子过程和函数,模块化的程序设计思想:,将程序分解成小的程序模块单元(子程序或函数),每个模块可以实现小的功能目标,它们组合起来实现大一些的功能目标。,按层次分解,主程序调用一个或多个下级子程序,这些被调用的子程序又可以调用更下层的子程序。,VB,中的模块:,事件过程(,Private Sub,对象名,_,事件名),Sub,过程,又称通用过程,或子过程,Function,过程,称,函数,7.2,子过程,VB,中的子程序分事件过程和通用过程两类:,事件过程,事件过程是,VB,事件驱动编程的重要机制。当,VB,中的某对象的某个事件被触发时,便自动调用对象的事件过程进行处理。因为事件过程的名称中包含了对象名和事件名,所以程序能够实现自动对应和调用。,通用过程,除事件过程以外的子程序都称为通用过程,通用过程由程序员自行定义和编写。一般存放到一个标准模块(文件扩展名为,.BAS,)中。,通用过程,定义和调用通用过程,定义,Private | Public Static Sub,过程名,(,参数列表,),.,End Sub,参数列表:,ByVal,参数名,As,类型, ,调用,Call ChangeColor(3),ChangeColor,2,事件过程,定义和调用事件过程,事件过程是,VB,事件驱动编程的重要机制。当,VB,中的某对象的某个事件被触发时,便自动调用对象的事件过程进行处理。,定义事件过程使用的是固定格式,不需要人工书写:,Private Sub,对象名,_,事件名,(,参数列表,),事件响应代码,End Sub,事件过程除了由系统自动来调用之外,也可以将它看作一个普通的子程序在程序中用代码来调用,调用语法没有特殊之处。如,:,Call,cmdAdd_Click,7.3,函数,定义和调用函数:,定义,Private | Public Static Function,过程名,(,参数列表,),.,End Function,过程的区别:,函数有数据类型,即返回值的类型,缺省为,Variant,给函数名本身赋值,即为返回值,如果象调用过程一样调用函数,则放弃返回值,退出子过程和函数,End Sub,:,退出子过程,End Function,:,退出函数,可以在子过程体内或函数体内任何位置使用上述语句,用来结束子过程或函数,子过程和函数的参数,VB,默认的参数是按地址传递,(,ByRef,),,,意味着如果过程内的参数值改变了,则调用过程时使用的变量其值也随之改变,Sub Main(),Dim x As Integer,x = 1,Call Test(x)x,的值改变了,End Sub,Private Sub Test (num As Integer),num = num+1,End Sub,按值传递,则用,ByVal,关键字,如:,数组作为参数示例,【,例,】,编写子程序,实现在所有学生名单数组中查找给定的名字,输出查找结果。,Sub Find(one As String, all() As String),Dim i As Integer, max As Integer,max =,Ubound(all,),取数组上界,For i =,LBound(all,) To max,If Trim(one) = Trim(all(i) Then,去两端空格比较,MsgBox,找到啦,Exit Sub,完成查找,End If,Next,MsgBox,没有找到,End Sub,函数的返回值,退出函数之前必须完成返回值的确定,对函数名自身赋一个值,该值就是函数的返回值。,函数赋值语句可以出现函数的任意位置,该语句并不代表退出函数。,如果没有给定返回值,函数会根据返回值的数据类型自动返回一个缺省值,如数值函数会返回,0,,字符串函数返回一个零长度字符串,(“”),。,函数示例,1,【,例,】,编写函数可以实现温度值从华氏转换为摄氏和从摄氏转换为华氏。,Function change(source As Integer,isCtoF,As Boolean) As Integer,If,isCtoF,Then,change = (source * 9 / 5) + 32,Else,change = (source - 32) * 5 / 9,End If,End Function,按下,【,摄氏,-,华氏,】,按钮,Private Sub Command1_Click(),lblResult.Caption,= ,华氏温度,= & change(CInt(text1.Text), True),End Sub,按下,【,华氏,-,摄氏,】,按钮,Private Sub Command2_Click(),lblResult.Caption,= ,摄氏温度,= & change(CInt(text1.Text), False),End Sub,函数示例,2,【,例,】,写一个函数,用来确定某年是否是闰年。,Function,isLeapYear(y,As Integer) As Boolean,If y Mod 40 or (y Mod 100=0 and y Mod 4000) Then,isLeapYear,= False,Else,isLeapYear,= True,End If,End Function,按下按钮,Private Sub Command1_Click(),Dim year As Integer,year = CInt(text1),If,isLeapYear(year,) Then,lblResult,= year & ,年是闰年,Else,lblResult,= year & ,年不是闰年,End If,End Sub,7.4,子过程和函数的作用域,过程定义时使用,Private,和,Public,关键字限定过程的作用域。,Private,:,表示该过程是私有的、局部的。只有与该过程处于同一模块文件中的其它过程才可以访问,之外的模块不能使用。,Public,:,表示该过程是公有的、全局的。工程中的所有模块都可以使用它。如果不指定作用域,过程会缺省为,Public,。,编写程序时,一般将一个工程公用的过程集中存放到标准模块文件(,.bas,),中,并使用,Public,关键字。,7.5,高级用法,函数参数定义为可选项,参数中使用,Optional,关键字,函数参数的数量可变,参数中使用,ParamArray,关键字,使用可选参数,可选的参数在调用函数时可以不填写,函数能照常可以工作。,Sub Test( num As Integer,Optional,Temp As Boolean),如果不指定,则布尔型参数的默认值为,False,,,字符串型参数的默认值为“”,数值型参数默认值为,0,可以在参数列表中指定缺省值,如:,Optional Temp As Boolean = True,可以用,IsMissing,函数,判断是否提供了参数,前提是该参数类型为,Variant,【,例,】,修改查找姓名的子程序,增加查找起始位置和查找方向。,可选参数示例,可以编写两个查找的子过程,但因为都是查找,模块化设计中通常只定义一个子过程,通过不同的参数来区分,修改查找子过程,参数,start,指定查找起始位置,参数,direction,为,True,表示向后正向查找,反之向前查找:,Sub Find(one As String, all() As String,Optional start As Integer=0,Optional direction As Boolean = True,),Dim,stuNames,() As String,按下,【,正向查找,】,按钮,Private Sub Command1_Click(),If,txtPos,= then,Call,Find(txtName,stuNames,),从第,1,个元素向后查,Else,Call,Find(txtName,stuNames,CInt(txtPos,),从指定元素向后查,End If,End Sub,按下,【,反向查找,】,按钮,Private Sub Command2_Click(),If,txtPos,= then,Call,Find(txtName,stuNames, ,False),从第,1,个元素向前查,Else,Call,Find(txtName,stuNames,CInt(txtPos,), False),从指定元素向前查,End If,End Sub,可选参数示例,子过程定义如下:,Sub Find(one As String, all() As String,Optional start As Integer=0,Optional direction As Boolean = True,),Dim i As Integer, min As Integer, max As Integer,min =,LBound(all,),max =,Ubound(all,),If start max or start &”),大写,Format(“abcde,”,”&”),小写,Format(“01064884680”,”&-&-&),表示字符,不足补空格,&,表示字符,不足补,0,基本字符串操作,10.,字符串比较,Like,运算符,If,strValue,Like “AB#”,如“,AB123”, “AB097”,If,strValue,Like “ABC*XYZ”,如“,ABCFDKJKXYZ”,If,strValue,Like “1?X”,如“,1KKJX”, “1AB3X”,If,strValue,Like “A-C#”,如“,A432”, “C599”,If,strValue,Like “AEIOUA-ZA-Z”,如“,ECD”,If,strValue,Like “!0-9?,如“,D3J”, “ZLJ”,基本字符串操作,11.,字符串转换类型,CInt,:,转换为整型数,CLng,:,转换为长整型数,CSng,:,转换为单精度浮点数,CDbl,:,转换为双精度浮点数,CCur,:,转换为货币,CDate,:,转换为日期,CStr,:,转换为字符串,Chr,:,Ascii,码转换为字符,Asc,:,字符转换为,Ascii,码,日期操作,1.,取当前日期,Now,2.,取日期中的年,Year,3.,取日期中的月,Month,4.,取日期中的日,Day,5.,取星期数,Weekday,:,返回,1-7,,即,vbMonday,vbSunday,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!