Version 3.0
过程和函数第 六章
2
回顾
使用图片框控件和图像控件
使用框架中的复选框和选项按钮
使用列表框和组合框控件
使用 Timer 控件创建 Timer 应用程序
3
目标
使用过程和函数
掌握程序中过程和函数的作用范围
使用参数和在函数及过程中传递参数的规则
使用 Visual Basic 支持的内部函数
使用 SUB MAIN 过程
4
过程和函数
为了简化应用程序的编程,可以将整个程序分成称为过程或函数的小段
在程序中使用过程或函数的主要优点
– 允许将程序分成独立的逻辑单元
– 提高程序的可读性
– 程序更容易维护或调试
– 提高代码的可重用性
5
过程
Visual Basic 中的过程通常称为 Sub 过程或子例程
过程是一组用来执行某项任务的语句
语句被放在 Sub/End Sub中
过程被调用时,将执行过程中的语句,没有返回值
6
定义过程
定义过程的语法:
Sub <procedure_name>
([argument1,argument2,…..argumentn])
….
<statements>
….
End Sub
7
过程 – 示例
Private Sub Form_Load()
Call showtime
End Sub
Sub showtime()
MsgBox Time
End Sub
在 VB环境中进行演示定义过程调用过程
8
函数
函数是一组被命名的语句,用户通过指定名称来调用它时,它将被执行,并返回值
函数的语句放在 Function/End Function
语句内
函数可以将值返回给调用程序
9
定义函数
Function <function_name>
([ arguments1,argument2,…..argumentn]) as
<return data type>
….
<statements>
….
<function_name>=<return value>
<End Function>
10
函数 – 示例
Private Sub Form_Load()
Dim new_d As Date
new_d = newday()
MsgBox new_d
End Sub
Function newday() As Date
newday = Date + 5
End Function
在 VB环境中进行演示定义函数调用函数
11
过程和函数的作用范围 2-1
应用于变量的作用范围规则同样应用于函数和过程
函数和过程可以使用如下关键字进行定义
– Public
– Private
– Static
例如,
Public Sub add( )
Static Function Calc_Salary( ) as Single
12
过程和函数的作用范围 2-2
声明为 Public 的函数或过程:可以从应用程序的任何地方被访问
声明为 Private 的函数或过程:只能在声明函数或过程的窗体内的进行访问
声明为 Static 的函数或过程
– 可以在应用程序的任何地方访问
– 和 Public的区别:在声明的过程或函数内的变量将在程序运行的整个过程中保留它们的值
13
过程和函数的作用范围 –示例
在 Form1窗体中创建函数 showDate( ),并声明为 Public函数
Public Sub showDate()
MsgBox Date
End Sub
在 Form2窗体中调用 showDate( ) 函数:
call Form1.showDate
14
Exit 关键字
Visual Basic 提供了退出过程的,Exit Sub”
语句和退出函数的,Exit Function”语句,提早退出子例程 或函数
在遇到 Exit Sub 或 Exit Function 语句时,函数或过程当前的处理会停止
15
Exit 关键字 – 示例
Private Sub Form_Load()
MsgBox calc_sqr(0)
End Sub
Private Function calc_sqr(num As Integer) As Integer
Dim sqr As Integer
If num <= 0 Then
calc_sqr = 0
Exit Function
Else
calc_sqr = num * num
End If
End Function
在 VB环境中进行演示
16
过 程和函数的参数
参数不是必需的
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作
在调用过程时,传递到过程内的变量 称为参数
17
带参数的过程示例
' 计算圆的面积
Public Sub area_circ(radius As Integer)
Dim area As Double
area = 3.14 * radius * radius
MsgBox area
End Sub
Private Sub Form_Load()
Call area_circ(5)
End Sub
在 VB环境中进行演示
18
带参数的函数示例
' 计算一个整数的平方
Public Function calc_sqr(num As Integer)
Dim sqr As Integer
calc_sqr = num * num
End Function
Private Sub Form_Load()
Dim sqr As Integer
sqr = calc_sqr(5)
MsgBox sqr
End Sub
在 VB环境中进行演示
19
传递参数的规则通过引用传递 通过值传递
VB 应用程序传递参数的缺省方法 不 是缺省方法传递参数时,过程将从该变量的内存地址位置访问其实际内容传递参数时,传递到过程的只是参数的副本参数的值可以被传递到的过程永久改变只允许声明值的程序更改该值在指定参数时,关键字 ByRef 不是必需的要通过值传递参数,需要在函数声明中参数的前面附加关键字
ByVal
20
通过引用传递 – 示例
‘ 计算两个整数的和
Public Function add_num(num1 As Integer,num2 As
Integer) As Integer
add_num = num1 + num2
num1 = 0
num2 = 0
End Function
Private Sub Form_Click()
Dim a As Integer,b As Integer,tot As Integer
a = 10
b = 10
tot = add_num(a,b)
MsgBox (a & "," & b & "," & tot)
End Sub
在 VB环境中进行演示
Public Function add_num(ByRef
num1 As Integer,ByRef num2 As
Integer) As Integer
21
通过值传递 – 示例
‘ 计算两个整数的和
Public Function add_num(ByVal num1 As Integer,ByVal
num2 As Integer) As Integer
add_num = num1 + num2
num1 = 0
num2 = 0
End Function
Private Sub Form_Click()
Dim a As Integer,b As Integer,tot As Integer
a = 10
b = 10
tot = add_num(a,b)
MsgBox (a & "," & b & "," & tot)
End Sub
在 VB环境中进行演示
22
使用过程和函数分解代码 的优点
过程可用来将程序分割成独立的逻辑单元,
较容易进行调试
提高应用程序的可读性
提高代码的可重用性
程序的维护变得非常容易
23
分解代码的 示 例
在 VB环境中演示本章教材“将代码分割成过程和函数的示例”
24
Visual Basic 的内部函数
Visual Basic 提供了许多能够执行各种任务的内部预定义函数
– 算术函数
– 日期函数
– 字符串操作函数
不必亲自编写代码,就可以直接使用这类函数
25
算术函数函数名称 说 明
Abs(number) 此函数会返回所传递参数的绝对值
Sqr(number) 此函数会返回一个 Double类型的值,它表示所传递的参数的平方根
Rnd(number) 此函数会返回一个 Single类型的值,它表示 0
和 1之间的一个随机数
Int(number) 此函数会返回一个数的整数部分
Log(number) 此函数会返回一个 Double类型的值,它表示所传递的参数的自然对数。
26
日期函数 2-1
函数名称 说 明
Date() 会以月 /日 /年格式返回当前日期
Now() 返回系统日期及时间
Day(date) 返回所传递的 date参数中的日子
Month(date) 返回一个 1与 12之间的整数,表示所传递的
date参数中的月份
Year(date) 返回一个整数,表示所传递的参数 date中的年份
Weekday(date) 返回一个 1到 7之间的整数,该数字表示星期几,如 1代表星期日,2代表星期一。
27
日期函数 2-2
函数名称 说 明
DatePart(interval,date[,firstd
ayofweek[,firstweekofyear]])
返回参数 date的指定部分,interval
参数 表示将要返回的日期部分的格式,参数 firstdayofweek和
firstweekofyear是可选参数,它们分别指定星期的第一天和年的第一个星期
DateAdd(interval,number,
date)
此函数会返回一个加上间隔值的日期,interval参数 表示有关天、小时、
星期等时间单位,参数 number表示添加到初始日期的间隔数,参数
date表示初始日期。
28
日期函数 – Interval参数的值参数的值 说 明 参数的值 说明
yyyy 年 w 工 作日
Q 季度 ww 星期
m 月 h 小时
y 一年中的第几天 n 分钟
d 天 s 秒
29
字符串操作函数 2-1
StrComp函数的返回值:
函数名称 说 明
LCase(string) 将传递的字符串参数转换成小写
UCase(string) 将传递的字符串参数转换成大写
StrComp(string1,st
ring2,[compare])
会比较两个字符串并返回一个值 (-1,0,1)或为空返回值 说 明 返回值 说明
-1 String1小于 String2 1 String1大于 String2
0 String1等于 String2 Null String1或 String2为空
30
字符串操作函数 2-2
函数名称 说 明
Left(string,number) 返回从参数字符串 string左边开始指定个数
number的子字符串
Right(string,number) 返回从参数字符串 string右边开始指定个数
number的子字符串。
Len(string) 返回参数字符串的长度
LTrim(string) 用于删掉参数字符串左侧的空格
RTrim(string) 用于删掉参数字符串右侧的空格
Trim(string) 用于删掉参数字符串两侧的空格
31
设置程序入口
可以在“工程属性”对话框来设置启动窗体或其他启动对象
缺省情况下,应用程序中创建的第一个窗体是启动窗体
32
自定义 SUB MAIN 过程
有时可能需要在启动时不加载任何窗体,或在加载前要在后台执行一些代码,可通过在标准模块中建立 Sub Main 过程来实现
要将 Sub Main 过程设置为启动对象,可以使用“工程属性”对话框
33
使用自定义 SUB MAIN 过程
Private Sub Main()
‘<显示 闪屏 的语句 >
frmSplash_scr.Show
‘<应用程序的启动过程 >
‘……
‘……
‘<启动过程结束 >
‘<显示应用程序的主窗体并且卸载闪屏 >
frmStart.Show
Unload frmSplash_scr
End Sub
闪屏是一个简单的显示信息窗体,可在启动时显示,后台去执行一些比较复杂的过程,执行以后,就可以加载程序的第一个窗体,并卸载闪屏。
34
总结
使用过程和函数
– 过程和函数的作用域
– 使用 EXIT关键词
– 参数和参数传递规则
VB支持的内部函数
– 算术函数
– 日期函数
– 字符串操作函数
使用 SUB MAIN作为程序的入口