学习目标
通过本章的学习,能够掌握子过程与函数过程的定义及调用方法,掌握参数的值传递和地址传递的不同方式,掌握过程、变量的作用域及其使用方法,理解静态变量的概念及用法,了解递归的概念和使用方法。并通过两个实训项目,进一步理解并灵活应用本章知识点。
实训项目
1、项目题目一:数制转换
编写一个将其他进位制(二进制~十六进制)整数转换成十进制数的函数TrantoDec,并调用函数实现数制转换。
项目要求:建立如图5-1所示的界面。在Text1中输入任意进位制R(2~16),然后在Text2中输入相应的R进制数据Str,然后按下“转换”(Command1)按钮后,程序运行完成十进制的转换,并在Text3中输出转换后的结果。

图5-1 数制转换界面
2、项目题目二:随机产生10个任意两位正整数存放在一维数组中,求数组的最大数、平均数,并将数组按升序排列。

图5-2 随机数处理程序设计界面
项目要求:建立如图5-2所示的程序界面,在窗体中添加四个命令按钮和一个图片框。程序运行时,激活“产生随机数”按钮之前,其他三个按钮不可用。按下每个按钮后,完成相应的功能,结果显示在图片框中。每个按钮中事件代码通过调用相应的过程或函数来完成。程序运行结果如图5-3所示。

图5-3 随机数处理程序运行界面
过程是用来执行一个特定任务的一段程序代码。Visual Basic中的过程有两类:一类是系统提供的内部函数过程和事件过程,事件过程是构成Visual Basic应用程序的主体;另一类是用户根据自己的需要定义、供事件过程多次调用的自定义过程。使用过程能实现代码重用,使程序简练、便于调试和维护。
在Visual Basic 6.0中,用户自定义过程分为:以“Sub”保留字开始的子过程;以“Function”保留字开始的函数过程;以“Property”开始的属性过程;以“Event”保留字开始的事件过程。
本章主要介绍用户自定义的子过程和函数过程。
子过程不与任何特定的事件相联系,只能由别的过程来调用。建立子过程的主要原因是:有几个不同的事件过程要执行相同的动作,这时我们将公共语句放入子过程中,并由事件过程来调用它,就不必重复代码,也容易维护应用程序。
子过程的定义有以下两种方法。
1.利用代码窗口直接定义
在窗体或标准模块的代码窗口中,把光标定位在已有过程之外,键入Sub子过程名即可。
自定义子过程的一般形式如下:
[Static] [Public|Private] Sub 子过程名 [(形参表)]
[局部变量或常数定义]
[语句序列]
[Exit Sub]
[语句序列]
End Sub
说明:
(1) [Static] [Public|Private]的意义详见5.4内容。
(2) 子过程名命名遵循标识符命名规则。
(3) 语句序列是Visual Basic的程序段,其中可以用一个或多个Exit Sub语句从过程中退出。
(4) 形参表指明从调用过程传递给过程的变量个数和类型。各变量名之间用逗号分隔。
2.利用“工具”菜单下的“添加过程”命令定义
步骤如下:
(1)打开要添加过程的代码编辑窗口。
(2)选择“工具”菜单下的“添加过程”命令,打开“添加过程”对话框,如图5-4所示。

图5-4 “添加过程”对话框
(3)在“名称”框中输入过程名。从“类型”组中选取“子程序”类型,从“范围”组中选取范围,相当于使用Public或Private关键字。
(4)单击“确定”按钮退出对话框后,建立了一个子过程的模板,你就可在其中编写代码了。代码窗口显示如图5-5 所示。

图5-5 代码编辑窗口
要执行一个过程,必须调用该过程。
调用子过程的方法有两种:
1.使用Call:Call 子过程名([实参表])
2.直接使用过程名:子过程名 [实参表]
说明:
(1)实参表是实际参数列表,参数之间要用逗号分隔。
(2)当用Call语句调用过程时,其过程名后必须加括号。若有参数,则参数必须放在括号之内。
(3)直接使用过程名调用时,过程名后不能加括号。若有参数,则参数直接跟在过程名之后,参数与过程名之间用空格隔开。
例5-1 将求三角形面积的代码存放在过程triarea(a,b,c)中,边长从三个文本框中输入,如果符合构成三角形的条件,则调用该过程,否则调用suberr过程。
设计步骤如下:
(1)设计程序界面并设置对象属性,如图5-6所示。

图5-6 已知三角形边长求三角形面积