函数过程的建立: 在代码编辑窗口下,函数过程的建立有两种方法,第一种方法是通过菜单建立,第二种方法是在代码窗口下直接建立。1.利用菜单建立 操作步骤如下:(1) 在“工具”菜单下选择“添加过程”命令,显示“添加过程”对话框(如图8-1);(2) 在“名称”框中输入函数过程名(命名规则符合变量命名规则),例如输入fact;(3) 在类型框中选择过程类型为函数过程;(4) 在范围框中,若选择“公有的”选项,则定义一个公共级的全局过程,若选择“私有的”选项,则定义一个标准模块级或窗体级过程。这时,VB建立了一个函数过程的模板,结构如下:Public Function fact() 语句组End Function用户就可以在其中编写代码了。这种方法不太方便的是出现函数模板后需要根据需要添加参数表,一般较少使用。2.在代码窗口下直接建立 在窗体或标准模块的代码窗口中,把插入点放在所有现有过程之外,直接输入函数过程,格式如下:[Static] [Private|Public] Function 函数过程名([形式参数列表]) [As 数据类型]语句组End Function其中:(1) 函数过程名 函数过程名的命名规则与变量命名相同。它有两方面的作用,一方面标识一个函数过程,另一方面可将函数运算的结果传回到函数调用处。(2) [As 数据类型] 是函数返回值的类型,默认为变体类型。(3) ([形式参数列表]) 代表在函数调用时要传递给Function过程的参数变量列表。多个参数间用逗号隔开。形式参数本身没有值,只代表了参数的个数、位置和类型,系统并不为其开辟实际内存空间。([形式参数列表])可以没有,但一对括号不能省略,这种过程叫无参函数过程,其形式为:[Static] [Private|Public] Function 函数过程名() [As 数据类型] 语句组End Function(4) [Private|Public] 用于确定过程的作用域,[Static]用于确定过程变量为静态变量,将在本章第4节中详细介绍。(5) 语句组:又称为函数体,函数体中的执行语句,用来完成函数值的运算。在程序流程返回调用程序之前,必须将函数值赋给函数名,这一点初学者必须注意。将函数值赋给函数名的格式如下:函数名=表达式如果在函数体中含有Exit Function 语句时,表示强行退出过程。例 编写计算n的阶乘的函数过程。 Function fact(n As Integer) As long Dim i As Integer,f As Integer f = 1 For i = 1 To n f = f * i Next i fact=f End Function 以上三个自定义函数可以放入任意一个窗体中被其所在窗体中的各个过程调用,也可以单独以文件形式存放到磁盘,当需要时再以独立模块的形式加入任意一个工程。 函数过程调用: 1.直接调用 调用Function过程的方法比较简单,可以像使用VB内部函数一样来调用。调用Function过程的格式为:函数过程名(实参表)其中:(1) 实参表是实际参数列表,参数之间用逗号隔开。(2) 实参表中的实参个数必须与对应函数过程的形参个数完全相同。实参和形参按它们的位置建立起一一对应的关系,实参名和对应位置上形参名无需相同,实际参数可以是常数和表达式,也可以是与形参同类型的变量和数组元素。(3) 在调用函数过程时,实参的值传给对应位置上的形参,程序的流程转向执行函数体内的语句,遇到End Function或Exit Function语句时,返回到调用处,并将函数值带回。 调用上例中的函数fact来计算表达式S=5!+6!+7!的值,代码在窗体的Click事件中。Private Sub Form_Click() Dim sum As LongDim i As Integer sum = 0 For i = 5 To 7 sum = sum + fact(i) Next i Print "5!+6!+7!="; sumEnd Sub另例 已知函数,。要求将定义为自定义函数myexp,精度要求10-5,并从键盘输入x的值,求出sinh(x)。Function myexp(x As Single) As Single Dim n As Integer, t As Single, s As Single n = 0 t = 1 s = 1 Do While (Abs(t) > 0.00001) ' 计算精度要求 n = n + 1 t = t * x / n s = s + t Loop myexp = s ' 将运算结果赋给函数名End FunctionPrivate Sub Command1_Click()Dim y As Singley = (myexp(Text1.Text) - myexp(-Text1.Text)) / 2Label2.Caption = "表达式sinh(x)的值为:" & Format(y,"0.000")End SubPrivate Sub Command2_Click() UnLoad MeEnd Sub本例中自定义了myexp函数,其实VB中有相应的内部函数Exp,读者在调试程序时可以再在窗体上加一个Label3,放在Label2之下,并将Command1_Click事件中改为:Private Sub Command1_Click()Dim y1 As Single,y2 as Singley1 = (myexp(Text1.Text) - myexp(-Text1.Text)) / 2y2 = (exp(Text1.Text) - exp(-Text1.Text)) / 2Label2.Caption = "表达式sinh(x)的值为:" & Format(y1,"0.000")Label3.Caption = "表达式sinh(x)的值为:" & Format(y2,"0.000")End Sub然后运行程序,对比自定义函数计算结果与内部函数计算结果是否相同。2.用Call语句调用 如果不需要函数返回值,还可以用Call语句调用函数,调用格式有两种:第一种:Call 函数名(实际值表)第二种:函数名 实际值表3.无参函数调用 无参函数的调用时,仅需给出函数名,格式为:函数名例 设计一个无参函数,用于以“XX点XX分XX秒”的格式显示当前时间。完成本例时,在窗体上添加一个标签、一个计时器,标签的AutoSize设置为True,计时器的Interval设置为1000。Function mytime() mytime = Hour(Time) & "点" & Minute(Time) & "分" & Second(Time) & "秒"End FunctionPrivate Sub Timer1_Timer() Label1.Caption = mytimeEnd Sub
在代码编辑窗口下,函数过程的建立有两种方法,第一种方法是通过菜单建立,第二种方法是在代码窗口下直接建立。1.利用菜单建立
操作步骤如下:(1) 在“工具”菜单下选择“添加过程”命令,显示“添加过程”对话框(如图8-1);(2) 在“名称”框中输入函数过程名(命名规则符合变量命名规则),例如输入fact;(3) 在类型框中选择过程类型为函数过程;(4) 在范围框中,若选择“公有的”选项,则定义一个公共级的全局过程,若选择“私有的”选项,则定义一个标准模块级或窗体级过程。这时,VB建立了一个函数过程的模板,结构如下:Public Function fact() 语句组End Function用户就可以在其中编写代码了。这种方法不太方便的是出现函数模板后需要根据需要添加参数表,一般较少使用。2.在代码窗口下直接建立
在窗体或标准模块的代码窗口中,把插入点放在所有现有过程之外,直接输入函数过程,格式如下:[Static] [Private|Public] Function 函数过程名([形式参数列表]) [As 数据类型]语句组End Function其中:(1) 函数过程名 函数过程名的命名规则与变量命名相同。它有两方面的作用,一方面标识一个函数过程,另一方面可将函数运算的结果传回到函数调用处。(2) [As 数据类型] 是函数返回值的类型,默认为变体类型。(3) ([形式参数列表]) 代表在函数调用时要传递给Function过程的参数变量列表。多个参数间用逗号隔开。形式参数本身没有值,只代表了参数的个数、位置和类型,系统并不为其开辟实际内存空间。([形式参数列表])可以没有,但一对括号不能省略,这种过程叫无参函数过程,其形式为:[Static] [Private|Public] Function 函数过程名() [As 数据类型] 语句组End Function(4) [Private|Public] 用于确定过程的作用域,[Static]用于确定过程变量为静态变量,将在本章第4节中详细介绍。(5) 语句组:又称为函数体,函数体中的执行语句,用来完成函数值的运算。在程序流程返回调用程序之前,必须将函数值赋给函数名,这一点初学者必须注意。将函数值赋给函数名的格式如下:函数名=表达式如果在函数体中含有Exit Function 语句时,表示强行退出过程。例 编写计算n的阶乘的函数过程。
Function fact(n As Integer) As long
Dim i As Integer,f As Integer
f = 1
For i = 1 To n
f = f * i
Next i
fact=f
End Function
以上三个自定义函数可以放入任意一个窗体中被其所在窗体中的各个过程调用,也可以单独以文件形式存放到磁盘,当需要时再以独立模块的形式加入任意一个工程。
函数过程调用:
1.直接调用
调用Function过程的方法比较简单,可以像使用VB内部函数一样来调用。调用Function过程的格式为:函数过程名(实参表)其中:(1) 实参表是实际参数列表,参数之间用逗号隔开。(2) 实参表中的实参个数必须与对应函数过程的形参个数完全相同。实参和形参按它们的位置建立起一一对应的关系,实参名和对应位置上形参名无需相同,实际参数可以是常数和表达式,也可以是与形参同类型的变量和数组元素。(3) 在调用函数过程时,实参的值传给对应位置上的形参,程序的流程转向执行函数体内的语句,遇到End Function或Exit Function语句时,返回到调用处,并将函数值带回。
调用上例中的函数fact来计算表达式S=5!+6!+7!的值,代码在窗体的Click事件中。Private Sub Form_Click() Dim sum As LongDim i As Integer sum = 0 For i = 5 To 7 sum = sum + fact(i) Next i Print "5!+6!+7!="; sumEnd Sub另例 已知函数,。要求将定义为自定义函数myexp,精度要求10-5,并从键盘输入x的值,求出sinh(x)。Function myexp(x As Single) As Single Dim n As Integer, t As Single, s As Single n = 0 t = 1 s = 1 Do While (Abs(t) > 0.00001) ' 计算精度要求 n = n + 1 t = t * x / n s = s + t Loop myexp = s ' 将运算结果赋给函数名End FunctionPrivate Sub Command1_Click()Dim y As Singley = (myexp(Text1.Text) - myexp(-Text1.Text)) / 2Label2.Caption = "表达式sinh(x)的值为:" & Format(y,"0.000")End SubPrivate Sub Command2_Click() UnLoad MeEnd Sub本例中自定义了myexp函数,其实VB中有相应的内部函数Exp,读者在调试程序时可以再在窗体上加一个Label3,放在Label2之下,并将Command1_Click事件中改为:Private Sub Command1_Click()Dim y1 As Single,y2 as Singley1 = (myexp(Text1.Text) - myexp(-Text1.Text)) / 2y2 = (exp(Text1.Text) - exp(-Text1.Text)) / 2Label2.Caption = "表达式sinh(x)的值为:" & Format(y1,"0.000")Label3.Caption = "表达式sinh(x)的值为:" & Format(y2,"0.000")End Sub然后运行程序,对比自定义函数计算结果与内部函数计算结果是否相同。2.用Call语句调用
如果不需要函数返回值,还可以用Call语句调用函数,调用格式有两种:第一种:Call 函数名(实际值表)第二种:函数名 实际值表3.无参函数调用
无参函数的调用时,仅需给出函数名,格式为:函数名例 设计一个无参函数,用于以“XX点XX分XX秒”的格式显示当前时间。完成本例时,在窗体上添加一个标签、一个计时器,标签的AutoSize设置为True,计时器的Interval设置为1000。Function mytime() mytime = Hour(Time) & "点" & Minute(Time) & "分" & Second(Time) & "秒"End FunctionPrivate Sub Timer1_Timer() Label1.Caption = mytimeEnd Sub