![]() ![]() |
|
VB考试教程:过程之子过程 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:46:41 文章录入:杜斌 责任编辑:杜斌 | |
|
|
子过程是在响应事件时执行的程序段。将模块中的代码分成子过程后,在应用程序中查找和修改代码变得更容易了,子过程类似于用户自定义函数,不同之处是子过程不返回与其名称相关联的值,子过程一般用来从用户那里得到输入数据、显示或打印信息,或者操纵与某一条件相关的几种属性。子过程也用来在过程调用中处理和返回若干个变量。大多数函数只能返回唯一一个值,但子过程却能够返回多个值。 (1)定义Sub子过程 定义子过程的语法格式: [Private|Public|Friend][Static]Sub过程名[(参数列表)] [程序段] [Exit sub] [程序段] End Sub 例如: Private Sub Subtest() 说明: 1)Sub过程以Sub开头,以End Sub结束,在Sub和End Sub之间是描述过程操作的语句块,称为“过程体”或“子程序体”。 格式中个参量的含义如下: ![]()
注:如果没有使用Private,Public或Friend等,Sub过程在缺省情况是公用的。 ![]()
“参数列表”指明了调用时传送给过程的参数的类型和个数,每个参数的格式为: [ByVal]变量名[()][As数据类型] 这里的“变量名”是合法的VB变量名或数组名,如果是数组,则要在数组名后面加一对括号; “数据类型”指的是变量的类型,如果省略,则默认为Variant; 变量名前面的“ByVal”是可选的。如果加上ByVal,则表明该参数是“传值”参数,否则为“引用”参数。关于这方面内容将在后面详细介绍。 2)在过程体内可以用一个或多个Exit Sub 语句,执行从一个Sub过程中退出。 3)Sub过程不能嵌套。也就是说,在Sub过程内,不能定义Sub过程或Function过程;不能使用GoSub,GoTo或Return来进入或退出Sub过程,只能通过调用执行Sub过程,而且可以嵌套调用。 4)Sub过程可以是递归的,也就是说,该过程可以调用自己来完成某个特定的任务。不过,递归可能会导致堆栈上溢。通常Static关键字和递归的Sub过程不在一起使用。 5)在过程调用中,发送到子过程的参数值和类型必须与子过程声明语句中参数值和类型相符。 下面是一个Sub过程的例子: Sub Tryout(x As Integer,ByVal y As Integer) 上面的过程有两个形式参数,其中第二个前面有ByVal,表明该参数是一个传值参数。 过程可以有参数,也可以不带任何参数——称无参过程。如下例: Sub ContinueQuery() 对于无参过程,调用时只写过程名即可。 (2)建立Sub过程 Sub过程可以在标准模块中建立,也可以在窗体模块中建立。 在标准模块中建立过程的方法有两种。 第一种方法操作步骤为: 1)“添加模块”,同时打开模块“代码窗口”; 2)“工具”菜单/“添加过程”命令,打开“添加过程”对话框; 3)在“名称”框中输入要建立的过程的名字(例如Tryout); 4)在类型栏内选择要建立的过程的类型。如果建立子过程,则选择“子过程”,同样,如果建立的是函数过程,则选择“函数过程”; 5)在范围栏内选择过程的适用范围。选择“公有的”,则建立的过程可用于本工程内所有窗体模块,选择“私有的”,只能用于本标准模块。
6)“确定”。 第二种方法:直接在模块“代码窗口”中键入过程的名字,如键入“Sub Tryout()”后,按回车键。 在窗体模块中建立过程很简单,和上面的第二种方法类似,只是在窗体模块的“代码窗口”中输入。 双击窗体进入“代码窗口”,在对象框中选择“通用”,“过程”框中选择“声明”,然后直接在窗口内键入“Sub Tryout()”后,按回车键。 建立了过程后,在模块“代码窗口”中的“过程”框中,将显示该过程名。 (3)查看其它模块中的过程 要查看其它模块中的过程,请按照以下步骤: 1)"视图"菜单中选取"对象浏览器"; 2)在"工程/库"框中选择工程; 3)在"类/模块"列表中选择模块,并在"成员"列表中选择过程; 4)单击右键,在弹出菜单中选取"查看定义",查看选中的过程。 (4)调用子过程 要执行一个过程,必须调用该过程。 调用Sub过程有两种方法:使用Call语句和直接把过程名作为一个语句使用。 1)用Call语句调用Sub过程 格式:Call 过程名[(实际参数)] 如果过程没有参数,则“实际参数”和括号可以省略,否则应给出相应的实际参数,并放在括号内。如: Call Tryout(a,b) 2)把过程名作为一个语句来使用 这时,省略关键字Call。例如: Tryour a,b 说明:当使用Call语法时,参数必须在括号内。若省略Call关键字,则也必须去掉参数两边的括号。 例如,先定义一个名为Display的子过程: Sub Display(disString As String) 调用这个子过程(在窗体上添加一个命令按钮): Private Sub Command1_Click() (5)例题 下面将通过一些例子,理解过程的使用。 例1:编写一个计算矩形面积的Sub过程,然后调用该过程计算矩形面积。 程序如下: Sub Recarea(Rlen,Rwid) Private Sub Command1_Click() 在上面的例子中,Rlen、Rwid称为窗体参数。除窗体参数外,控件也可以作为通用过程的参数,即在一个通用过程中设置相同性质控件所需要的属性,然后用不同的控件调用此过程。 例2:编写一个通用过程,在过程中设置字体属性,并调用该过程显示指定的信息。 界面: 在窗体上添加两个文本框,大小适中。 代码: Sub Fontout(TextCtrl1 As Control, TextCtrl2 As Control) 例3:实现字体闪烁效果。 界面: 在Form1上配置一个计时器控制Timer1、标签控件Label1、命令控件Command1。Timer1的Enabled设置为True;Label1的Caption设置为需闪烁的文字,如“蚌埠电大”;Command1中的Caption设置为“退出”。 代码: Option Explicit Private Sub Form_Load() Private Sub Timer1_Timer() '利用计时器控件Timer有规律地改变字体颜色 (ForeColor)
End Sub Sub Chc(Cont As Control, Color1 As Integer, Color2 As Integer, Color3 As Integer) Private Sub Command1_Click() 例3:见教材P182自测题五的第4题,设计一个程序,可以对Image控件中的图像进行放大和缩小。 如果不用过程,代码为: Option Explicit 本例也可以使用过程,代码为: Option Explicit Private Const ratio_small As Single = 0.5 |
|
![]() ![]() |