第08章子过程与函数

上传人:野鹰 文档编号:46111716 上传时间:2018-06-22 格式:PPT 页数:34 大小:114.50KB
返回 下载 相关 举报
第08章子过程与函数_第1页
第1页 / 共34页
第08章子过程与函数_第2页
第2页 / 共34页
第08章子过程与函数_第3页
第3页 / 共34页
第08章子过程与函数_第4页
第4页 / 共34页
第08章子过程与函数_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《第08章子过程与函数》由会员分享,可在线阅读,更多相关《第08章子过程与函数(34页珍藏版)》请在金锄头文库上搜索。

1、第八章 子过程和函数子程序和函数 如何编写和使用 子程序和函数的作用域 VB内部函数介绍 VB模块模块的两层含义: l 工程中的资源: 一个应用程序就是一个工程,窗体模块 (.frm)、类模块(.cls)、标准模块(.bas) 。这是一种高层次的模块划分,它们以独立的 文件方式管理。 l 子程序和函数: 一个窗体模块或标准模块也是由一些功 能单元组成的,这就是子程序和函数,统称为 过程(Procedure)。相对来说这是一种较低 层次的模块划分。VB中提供的一些函数(比如 上一章的UBound)以及事件过程就是这层含 义。 VB文件的内容每一类型的文件都可以包含过程和通用声明:过程:可以是子过

2、程、函数过程或事件 过程。每一种过程都由代码组成。声明:在模块级通用声明部分放置常量 、变量、动态链接库等的声明。窗体模块文件*.frm工程中的每个窗体都有一个与之相应的窗体模块 文件 窗体文件中包含: 窗体本身及窗体上放置的所有控件的属性设置 窗体级变量、常量、类型声明和外部过程 的声明 所有相关的事件过程及窗体级通用过程说明: 同一窗体模块内的通用过程与事件过程可 以相互调用 若窗体模块内的通用过程被声明为公有的 ,可以被其它窗体模块或标准模块中的过程调用 。调用方法为:窗体名.过程名,如From1.Test 。 标准模块文件*.bas标准模块中的代码可以被工程中的所有模块,包括窗体 模块

3、、其它标准模块,所共享。 标准模块中包含: 通用过程 没有事件过程 公共或模块级的变量、常量、外部过程和全局过 程的声明说明: 标准模块存放于独立的文件中,其扩展名为 .bas 。 标准模块中通用过程缺省为公有(Public),即 工程中的任一模块均可共享、调用。类模块文件*.cls类模块包含用来创建对象的类定义包含类的属性和方法的定义子过程和函数VB中的过程:事件过程(Private Sub 对象名_事 件名) Sub过程,又称通用过程,或子过 程 Function过程,称函数通用过程一、定义和调用通用过程 定义Private | Public Static Sub 过程名(参数列表).En

4、d Sub参数列表:ByVal 参数名 As 类型, 调用 Call ChangeColor(3) ChangeColor 2事件过程二、定义和调用事件过程 事件过程是VB事件驱动编程的重要机制。当VB中的某对 象的某个事件被触发时,便自动调用对象的事件过程进行 处理。 定义事件过程使用的是固定格式,不需要人工书写:Private Sub 对象名_事件名(参数列表)事件响应代码 End Sub 事件过程除了由系统自动来调用之外,也可以将它看作一 个普通的子程序在程序中用代码来调用,调用语法没有特 殊之处。如: Call cmdAdd_Click函数三、定义和调用函数 定义Private | P

5、ublic Static Function 过程名(参 数列表).End Function 过程的区别: 函数有数据类型,即返回值的类型,缺省为 Variant 给函数名本身赋值,即为返回值 如果象调用过程一样调用函数,则放弃返回 值退出子过程和函数 End Sub:退出子过程 End Function:退出函数 可以在子过程体内或函数体内任何位置使用上 述语句,用来结束子过程或函数子过程和函数的参数 VB默认的参数是按地址传递(ByRef ),意味着如果过程 内的参数值改变了,则调用过程时使用的变量其值也随 之改变 Sub Main() Dim x As Integer x = 1Call

6、Test(x)x的值改变了 End SubPrivate 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 maxIf Trim(one) = Trim(all(i) Then 去两端空格M

7、sgBox “找到啦“Exit Sub 完成 查找End If Next MsgBox “没有找到“ End Sub函数的返回值 退出函数之前必须完成返回值的确定,对函数名自 身赋一个值,该值就是函数的返回值。 函数赋值语句可以出现函数的任意位置,该语句并 不代表退出函数。 如果没有给定返回值,函数会根据返回值的数据类 型自动返回一个缺省值,如数值函数会返回0,字 符串函数返回一个零长度字符串 (“”)。函数示例1【例】编写函数可以实现温度值从华氏转换为摄氏和从摄氏转换 为华氏。 Function change(source As Integer, isCtoF As Boolean) As

8、IntegerIf isCtoF Thenchange = (source * 9 / 5) + 32Elsechange = (source - 32) * 5 / 9End If End Function 按下【摄氏-华氏】按钮 Private Sub Command1_Click()lblResult.Caption = “华氏温度=“ & change(CInt(text1.Text), True) End Sub 按下【华氏-摄氏】按钮 Private Sub Command2_Click()lblResult.Caption = “摄氏温度=“ & change(CInt(text

9、1.Text), False) End Sub函数示例2【例】写一个函数,用来确定某年是否是闰年。 Function isLeapYear(y As Integer) As BooleanIf y Mod 40) ThenisLeapYear = FalseElseisLeapYear = TrueEnd If End Function 按下按钮 Private Sub Command1_Click()Dim year As Integeryear = CInt(text1)If isLeapYear(year) ThenlblResult = year & “年是闰年“ElselblResu

10、lt = year & “年不是闰年“End If End Sub 子过程和函数的作用域过程定义时使用Private和Public关键字限定过程的作 用域。 Private:表示该过程是私有的、局部的。只有与该 过程处于同一模块文件中的其它过程才可以访问, 之外的模块不能使用。 Public:表示该过程是公有的、全局的。工程中的 所有模块都可以使用它。如果不指定作用域,过程 会缺省为Public。编写程序时,一般将一个工程公 用的过程集中存放到标准模块文件(.bas)中,并 使用Public关键字。 使用可选参数可选的参数在调用函数时可以不填写,函数能照常可 以工作。 Sub Test( nu

11、m As Integer, Optional Temp As Boolean) 如果不指定,则布尔型参数的默认值为False,字 符串型参数的默认值为“”,数值型参数默认值为0 可以在参数列表中指定缺省值,如: Optional Temp As Boolean = True 可以用IsMissing函数,判断是否提供了参数,前 提是该参数类型为Variant【例】修改查找姓名的子程序,增加查找起始位置和查 找方向。 可选参数示例 可以编写两个查找的子过程,但因为都是查找,模块化 设计中通常只定义一个子过程,通过不同的参数来区分 修改查找子过程,参数start指定查找起始位置,参数 direct

12、ion为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 = “ thenCall Find(txtName, stuNames) 从第1个元素向后查 ElseCall Find(txtName, stuNames, CInt(txtPos)

13、从指定元素向后查 End If End Sub 按下【反向查找】按钮 Private Sub Command2_Click() If txtPos = “ thenCall Find(txtName, stuNames, ,False) 从第1个元素向前查 ElseCall Find(txtName, stuNames, CInt(txtPos), False) 从指定元素向前查 End If End Sub可选参数示例子过程定义如下: Sub Find(one As String, all() As String, Optional start As Integer=0, Optional

14、direction As Boolean = True) Dim i As Integer, min As Integer, max As Integermin = 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”

15、 如“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,即vbMondayvbSunday

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号