• 沒有找到結果。

函数与过程

在文檔中 第 2 章 Visual Basic 语言基础 (頁 35-38)

函数是完成某一功能的程序代码段,又称程序模块。该段程序代码以一定格式实现并通 过函数名来调用。编写函数的目的是便于维护,避免代码重复编写,提高程序设计效率。

一般来说,函数是有返回值的,函数的返回值即函数执行的结果。实际上,过程也是函 数,只是没有返回值的函数;所谓方法,是存在于某个对象中的函数或过程。

函数分为系统函数和自定义函数。系统函数是 VB 提供的内部函数,可以直接通过函数名 调用,如 MsgBox()函数、Len()函数等。自定义函数是用户自己设计的函数。 

2.6.1 自定义函数

格式:[作用范围关键字] Function  函数名(参数列表)As 返回值类型 代码段 

[Exit Function] 

函数名=返回结果  End Function  说明:

l 关键字 Function…End Function:函数的定义结构。

l 作用范围关键字:使用 Public 或 Private 关键字,指定该函数是在本模块使用还是可 以被其他模块使用,含义与变量作用范围中说明的相同,不指明作用范围时,默认是 使用 Public 关键字。但不能使用 Dim 关键字。

l 参数:需要传递到函数中处理的数据,多个参数以逗号分隔;调用函数时,传递给函 数的参数必须和函数定义时的个数、位置和类型一致。

l 函数返回值: 通过对函数名赋值方式返回调用函数的结果, 返回值必须与函数定义时 的数据类型一致,函数只能通过函数名返回一个值,不能返回多个值。

例 2­38  定义一个名为 Add 的函数,实现任意两个整数相加,并返回相加的结果。

【程序代码】

'函数的定义

Private Function Add(ByVal x As Integer, ByVal y As Integer) As Integer  Dim Sum As Integer 

Sum = x + y  Add = Sum  End Function  '函数的使用

Private Sub Command1_Click()  Dim Sum As Integer 

Sum = Add(1, 2) 

MsgBox ("计算结果是:" & Sum)  End Sub 

2.6.2 自定义过程

过程分为事件过程和自定义过程。事件过程是在对象上触发某个事件时,系统自动调用 的过程。程序设计中接触最多的是命令按钮的 Click 事件过程,本章大部分例子都通过命令按 钮的事件过程来说明。

过程名可以自定义。VB  中对象的事件过程按“对象名_事件名”格式自动命名,表示在 什么对象上发生什么事件时,调用该过程。

格式:Sub  过程名(参数列表)  代码段 

[Exit Sub] 

End Sub 

说明:过程不能有返回值。

例 2­39  编写一个 MyMsg 过程,模拟 MsgBox 函数的功能。

【程序代码】

'自定义过程

Sub MyMsg(ByVal msg As String)  MsgBox (msg) 

End Sub  '过程的使用

Private Sub Command1_Click()  MyMsg ("这是 MyMsg 过程")  End Sub 

2.6.3 参数传递

函数参数(包括过程参数)的传递方式有两种:值传递和引用传递。

一般,函数的参数称为形式参数,实际传递给函数参数的数据称为实际参数。实际参数 可以是变量或常量。

所谓值传递(ByVal),是在调用函数时,把实际参数的值传递给函数对应的形式参数;

所谓引用传递(ByRef) ,是在调用函数时,形式参数对应实际参数的内存地址。因此,引用 传递实际参数必须是变量。

两种传递方式的最大区别:引用传递可以改变实际参数的值,值传递不影响实际参数的 值。在例 2­40 中可以看出两者之间的差别。

例 2­40  值传递与引用传递的区别。

【程序代码】

'形式参数为值传递,使用关键字 ByVal 进行说明 Sub Testval(ByVal x As Integer) 

x = x + 10  End Sub 

'形式参数为值传递,使用关键字 ByRef 进行说明 Sub TestRef(ByRef x As Integer) 

x = x + 10  End Sub 

'在窗体上添加按钮 Button1  Private Sub command1_click() 

Dim m As Integer  m = 10 

Testval m 

MsgBox ("传值调用的结果是:" & m) '结果为 10,m 的值没有改变 m = 10 

TestRef m 

MsgBox ("传地址调用的结果是:" & m) '结果为 20,m 的值在 TestRef 中被改变了 End Sub

【运行结果】

如图 2­34 所示。

图 2­34  运行结果

说明:过程调用时,参数不能使用括号,否则将可能无法得到正确结果;如果要使用括 号,必须使用 Call 关键字,如:Call TestRef(m)。

2.6.4 使用可选的参数

在过程的参数列表中列入  Optional  关键字,可以指定过程的参数为可选,如果指定了可 选参数, 则参数表中该参数后面的其他参数也必须是可选的, 并且要用  Optional  关键字声明。

可选参数也可以指定默认值。

以下代码中,自定义过程 MyMsg 具有可选参数并指定了默认值,如果调用该过程时带参 数,则显示参数的值;如果不带参数,则显示默认值。

Sub MyMsg(Optional ByVal msg As String = "abc")  MsgBox msg 

End Sub 

Private Sub Command1_Click()  MyMsg 

MsgBox "OK" 

End Sub 

在文檔中 第 2 章 Visual Basic 语言基础 (頁 35-38)

相關文件