|
|
|
|
|
|
|
|
|
|
|
—、函数过程(Function Procedure) VB不但为我们提供了很多的内部函数,还允许用户根据需要自己定义函数,用户自己定义的函数即为函数过程(FunctionProcedure)。一般用于被调用后除了执行—段相应代码,还需要返回某个有用的值的情况。函数过程过程定义的格式如下: [public][Private]Function函数名{[参数列表]} [As类型] 函数体 End Function 其中,“[public][Private]”是用来指定函数是全局的还是模块级的,这两个关键字只能选择其中的一个。若是全局的,则要使用“Public",且是在标准模块中定义的,可以供所有模块使用;若是模块级的则要使用“Private”,它是在模块的“(声明)“部分定义的,只供本模块使用。 “参数列表”是定义函数运行时所需要的原始数据,此处的参数被称为形参。各形参之间要用逗号分隔,且还要说明类型,所有的形参都是过程级的变量,在函数被调用时定义并实参预赋初值。有些函数也可以不需要任何参数。 “As类型”是说明函数返回值的类型,缺省的话,默认是变体型的。在函数体中一定要包含形如“函数名=表达式”的语句,这是用来为函数设置返回值的。 最后的“End Function”是用来结束函数的。 下面我们来看这样一个例子: Public Function Max(x As Integer,y As Integer) As Integer If x>y Then Max=x Else Max=y End Function 这是一个标准了函数过程。我们可以通过前面的介绍看出这个函数是全局的,函数名为Max它有两个整型的形参,且返回值也是整型的。函数体部分的语句,是判断两个形参的把其中比较大的一个数作为返回值传递给调用者。 在定义了这个函数之后,我们就可以在程序中调用该函数了。调用自定义函数的方法与调用函数一样。例如在程序中使用了语句:a=Max(7,9),则变量a的值为9。 二、子程序(Sub Procedure)子程序与函数很相似,可以把它看作是没有返回值的函数过程,表示子程序只是用来完成指定的操作。定义格式如下: [Public][Private]Sub子程序名([参数列表]) 语句体 End Sub 从定义格式可以容易的看出它,与函数的区别:首先是定义时使用的是“Sub”关键字;另它没有定义函数时要求说明的返回值类型。下面我们来看这样一个例子: Public Sub Swap(x As Integer,y As Jnteger) Dim Z As Integer’ Z=x x=y y=z End Sub 上例中定义了一个用来交换两个变量值的子程序。在该例中首先定义了两个形参,之后在语句体中又定义了一个中间变量,然后把这两个形参的值交换。在调用子程序时,可以使用下面两种方式: (1)Call子程序名(参数列表)。 (2)子程序名 参数列表。 在定义了上面的子程序后,我们就可以调用这个子程序了。例如: Dim a AS Integer,b AS Integer a=7 b=13 swap a,b 执行过上述代码后,变量a、b的值分别变为13、7。 三、事件过程(Event Procedure) 所谓事件,就是指对于对象发生的不同情况应该做出的响应。事件被激发后,相应的代码(即事件过程)就会被执行。每个对象都有很多事件,每个事件则对应着一个事件过程。事件叫过程本质上与前面所说的子程序的一样的,只不过它是与对象的事件相联系的,只要某个对象某个事件发生了,与其相对应的事件过程就一定会执行。 例如我们在窗体上添加一个命令按钮,并输入了如下代码: Private Sub Commandl_Click() Textl.Text=”事件过程演示” End Sub 这是一个命令的按钮的单击事件过程,也就是说如果用户单击了这个命令按钮,就会执行此事件过程,把文本框显示的内容改为指定的内容。 当然,事件过程并不一定只是在事件发生时才执行,我们也可以人为的调用事件过程,调用的方法与调用子程序一样。 四、“添加过程”对话框 除了可以通过手工添加过程外,我们还可以使用“添加过程”对话框来为程序添加过程框。其使用方法如下: (1)打开开要添加过程的模块的代码编辑窗口。 (2)选择“工具”菜单中的“添加过程”命令,屏幕将显示“添加过程”对活框。 (3)在“名称”项处输入新过程的名称,在此我们输入“Min”。 (4)在类型处选择要添加过程的类型,选择“函数”。 (5)选择该过程是公有的(即全局的)还是私有的(即模块级的),选择“私有的”。 (6)最后,单击“确定”按钮。 此时,将会自动在代码编辑窗口中自动生成—个没有形参的函数过程的框架。 接下来,我们可以为该函数过程框架添加形参和返回值的类型,以及在其中添加相应的语体可完成添加一个新过程的任务。 3—10参数的定义 I 这里的参数是指由过程的调用者传递给过程的数据,既可以是变量,也可以是常量或表达式。通常也称为实参。下面我们来讨论一些有关参数的内容。 一、变量参数的传递方式 当以变量作为实参时,将会出现传值和传址两种传递参数的方式。 按传值方式时,只是把变量的值传递给形参。如果在过程中改变了这个形参的值,将不会影响到原变量。 按传址方式时,则是把变量在内存中的地址传递给形参。这时,形参将与原变量使用内存中的同一地址。也就是说,如果在过程中改变了这个形参的值,原变量也会随之而改变,参数按何种方式传递,是在定义过程时决定的。如果在定义形参时前面加上“ByNal”关键字,就是传值方式;如果在定义形参时前面加上“ByRef”关键字,就是传址方式。如果在定义过程时缺省了这两个关键字,默认的是传址方式。 例如将前面介绍的交换两个变量值的过程改成如下形式。 Public Sub Swap(ByNal As Integer,ByNal y As Integer) Dim z As Integer z=x x=y Y=z End Sub 如果再使用“swap a,b”来调用过程,变量的值就不会再改变了。因为,s、b是以传值的方式传递的,在过程中形参再怎样改变都与它们无关了。 因此,如果确定某个参数不需要在过程中改变,一定要在定义过程中在形参处加上“ByNa1”关键字,以防止发生意外的错误。 二、数组参数的传递方法当需要把数组作为参数传递给过程时,只需要在定义形参时,形参名后面加一对括号就行。下面我们来看这样一个例子: Private Sub Form Load() Dim x(7) As Inte9er,i As integer,a As Integer ‘定义数组及循环变量 For i=1 To7 ‘为数组元素赋值 X=(i)=Inputbox(“请输入一个整数:”,”输人数据”,0) Next i A=Max(x()) ‘调用自定义函数 End Sub
Private Function Max(a() As Integer) As Integer ‘定义函数过程 Dim I As Integer, m As Integer M=a(1) For 1=2 to 7 If a(i)>m then m=a(i) ‘将数组中的最大值存到变量m中 Max=m End Sub 这个程序先定义了一个数组、,然后再用1nputbox函数输入七个整数存到该数组里,之后再调用自定义函数Max取出这七个数中最大的数。在这里传递的参数就是数组x。 当数组作为参数时,只能以传址方式传递,而不能使用传值方式。也就是说以数组作为参数时,可以在过程中改变数组元素的值。 另外,函数的返回值也可以是数组。只需在说明函数返回值类型时在后面加上一对括号即可。 三、可选参数 在前面介绍的常用函数中我们可以发现,有很多参数的某些参数是可选的,也就是说在调用函数时可以传递这些参数,也可以不传递这写参数。因为些参数只是为了提供某项功能,但就项功能不是每次使用时都需要用到或使用默认就行了。 我们可以在定义过程对可选的参数加上“Optional”关键字,并且指定它的缺省值(即用户省略该参数时,具默认的值)。 使用可选参数时要注意:若某个参数被指定为可选参数,则它后面所有的参数都必须是可选的。 四、不定个数参数 在定义过程时,我们有时可能不知道会传递多少个参数,这时就需要用到不定个数的参数。方法是在定义过程时用“ParamArray”关键字来定义—个不定个数的参数,可以把这个参数当中是一个动态数组,其大小随参数的个数而定。 例如我们要定义一个求多个整数之和的函数过程,但又不知道可能会出现多少个数,可以吏用如下的方法定义函数: Private Function,MySum(ParamArray X()) As Long Dim i AS Integer,sum As Long Dim n AS Integer N=UBound(x) ‘取出该数组的长度(即不定参数的个数)做为循环终值 For i=0 To n Sum=sum+x(i) ‘求和 Next i MySum=sum ‘设置函数返回值 End FunctiOn 在这个函数中就用到了不定个数参数,定义过该函数后,就可以在程序中调用该函数丁。例如:a=MySum(3,8,5)或b=MySum(1,2,3,4,5,6)。执行过这两个浯句后,变量a、b的值分别16和21。 在使用“ParamArray”关键字时要注意以—卜几点: (1) “ParamArray”关键字定义的动态数组只能是变体型的,且其下界总是0。 (2) “ParamArray”关键字不能与“ByVal”、“ByReF”、“Optional”—起使用。 (3) “ParamArray”关键宇只能用于最后一个参数。 (4)若要使用不定个数参数,则其它参数不能被指定为可选的。 |
|
|
|
| |