配色: 字号:
第九章 过程
2016-06-21 | 阅:  转:  |  分享 
  
第九章过程9.1过程概述1.代码模块的类型VB应用程序由三种模块组成:分别是窗体模块、标准模块和类
模块,它们形成工程的模块层次结构,使不同的过程有不同的适用范围。打开模块的代码窗口有以下两种方法:(1)在“工程”菜单
中打开(2)在“工程资源管理器窗口”中打开窗体模块(Form)(文件扩展名.frm)包含:子过程
事件过程函数过程标准模块(Module)(文件扩展名.
bas)不对应于某个窗体、完全是纯代码。编制的代码是公用的包含:模块级常量、变量、数据类型以及全局过程
注:不能包含事件过程类模块(Class)(文件扩展名.cls)在类模块中编写新建对象的自定义属性和方法,让过程调
用2.过程的类型VisualBasic中的过程主要分为以下4种类型:1.子程序(Sub)子
程序又称为通用过程,是完成特定功能的子过程,必须由应用程序来调用,一般用Call语句调用子程序,“Sub”保留字开始的为子过程
。2.事件过程(Event)事件过程是指附加在窗体和控件上的过程,“Event”保留字开始的事件过
程。3.函数过程(Function)函数过程是被调用后要返回值的过程,“Function”保留字开
始的为函数过程。4.属性过程(Property)属性过程用于返回和设置对象属性的值,还可以设置对属性
的引用,可以创建和引用用户自定义的属性,用“Property”保留字开始的为属性过程创建子程序的过程(1)单击“文件”菜单中
的“新建工程”命令,创建一个新的工程,屏幕上出现新建工程的工程窗口及窗体,窗体设计器窗口如图所示。创建子程序的过程(2)如果
要创建子程序,选择“工具”菜单中的“添加过程”命令,打开“添加过程”对话框,如图所示,提示用户输入过程的名称和选择过程的类型。如果
选择建立子程序,会辅助用户建立子程序的开始和结束语句。PrivateSubCommand1_Click()Dimn
AsIntegern=InputBox("输出数列前几个元素?","菲波那奇数列")Callfibona(n
)EndSubPublicSubfibona(mAsInteger)Dimi,f1,f2,f3As
Integerf1=1f2=1Fori=1TomIfi=1Ori=2
ThenPrintf1;Elsef3=f1+f2Printf3;
f1=f2f2=f3EndIfNextiEndSub执行结果2.子程
序的选择和查看(1)选择和查看当前模块中的过程查看通用过程,在“代码”窗口的“对象框”中选择“通用”,
然后在“过程框”中选择需要的过程;查看事件过程,在“代码”窗口的“对象框”中选择相应的对象,然后在“过程框”中选择事件即可。(2
)选择和查看其他模块中的过程首先在“视图”菜单中选取“对象浏览器”,然后在“工程/库”框中选择要选取的工程
,再在“类/模块”列表中选择所需的模块,并在“成员”列表中选择所需要的过程,最后选取“查看定义”,过程代码就被调出。3.退出子
程序(1)程序执行到EndSub时,就会自动退出子程序,程序接着从主调用过程中调用该子程序语句的下一条语句执行。(2)Vi
sualBasic也提供了从过程体内部退出子程序的ExitSub与EndSub语句。二、子程序的调用1.调用语句
【格式】[Call]<调用子程序名>[(参数表)]调用关系示意图2.调用其他模块中的过程(1)调用窗体模块中的过程
【格式】[Call]<窗体模块名>.<过程名>[(参数表)]例如,若要调用窗体模块Form1中的过程Tes
t2,则调用语句是:CallForm1.Test2(2)调用标准模块中的过程【格式】[Call][<标准模块名>
.]<过程名>[(参数表)]例如,分别在窗体和模块中定义3个过程,同名过程的调用所示。窗体中有一个事件过程Comma
nd1_Click,在其中先后调用了标准模块中的过程s和窗体模块中的过程s。标准模块的建立如图(a)所示,事件过程和窗体模块如图(
b)所示,标准模块中的过程如图(c)所示。同名过程的调用(3)调用类模块中的过程调用类模块中的过
程,要指明与过程一致并且指向类实例的变量。首先要声明类的实例为对象变量,并用变量名引用它。在引用一个类的实例时,不能用类名做限定符
。例如:在类模块中定义4个过程,功能分别是进行加、减、乘、除的运算。然后在窗体模块中,分别调用类模块中的
过程。使用打开模块代码窗口的方法,打开一个类模块的代码窗口,并在其中编写过程代码,如图:
工程窗口显示有一个窗体Form1和类模块Class1,如图:调用的过程分为两步:①通过“DimtAsNewClas
s1”来声明变量t为指向Class1的对象变量。Class1是一个类的实例。②通过变量t作为类实例的代表,进一步去调用类模块中
的4个过程,以“<类实例变量>.<过程名>[(参数表)]”的格式进行调用。调用模块中的过程如图所示:调用类模块中的过程
在类模块中还可以定义属性,我们在上例的基础上对类模块进行一些修改。如图:在窗体的事件过程中,对类模块
中过程的调用方式基本不变,但是参数传递的形式却发生变化,被计算的数据赋值给类的两个属性t.x和t.y,如图所示,则数据会直接通过属
性传递到类模块的函数中,被计算后返回结果。9.3事件过程一、事件过程的创建事件:用户通过鼠标对界面上的某个对象进行某种
操作事件过程:操作引发的执行过程【格式】[Private|Public][Static]Sub<事件过程名>([参数表])
<过程体>EndSub【说明】整个格式与子程序的定义
格式相似,只是事件过程的名称和过程头部的生成可以由系统自动完成。创建事件过程,先在窗体中设置某个控件以后,双击该控件,就会出现代码
窗口,窗口中就会自动出现开始和结束语句,并且会为该事件过程取好名称。二、事件过程的调用事件过程的调用
不是通过调用语句来激发的,而是在程序的执行中,由用户对特定对象进行特定的事件操作激发的。比如Comma
nd1_Click过程是当用户对按钮Command1用鼠标左键进行单击这个操作时,去调用该过程的过程体执行的;Form_Load过
程是用户打开窗体Form时执行其过程体。9.4函数过程一、函数过程与子程序的异同相同点:都具有独立功能的过程
,因主调过程的调用而被执行,也能传递参数,执行一系列语句,执行完毕后又返回主调过程。无论从定义的格式上还是执行的方式上,都与子程序
非常相似。不同点:其本质的不同在于被调用后能否向主调过程返回一个值。由于函数是能够返回值的过程
,从而决定了在对其使用的方式上有下面一些和子程序不一样的地方。1.定义语句中的区别定义函数过程的语法是:【格式】
[Private|Public][Static]Function<函数名>([参数表])[As<类型>]<函数
体>EndFunction【说明】定义函数的语句是Function…EndFunction语句,而不是
Sub…EndSub语句;Function语句中有一个可选项[As<类型>]是Sub语句所没有的,它表示对函数返回值的类型进行
声明,在此声明的类型应与函数实际返回值的类型一致。对于参数表的声明,形式参数的语法格式如下:【格式】[ByVal|ByR
ef]<参数名>[()][As<类型>]【说明】ByVal表示参数按值传递。ByRef表示参数按地址传递,这也是参数传递的默
认方式。As<类型>声明参数的数据类型。2.函数体中含有定义返回值的赋值语句定义函数返回值的赋值语句格式是:【格式】
<函数名>=<返回值表达式>【说明】<返回值表达式>确定函数的返回值,该表达式应具有唯一确定的值;如果没有定义返回值,则
函数将返回一个默认值。3.调用方式不同调用子过程时,不管用Call语句调用还是直接调用,都独立成
一个语句并且独自占一行,调用函数的过程除了要执行一段具有特定功能的函数体之外,更关键的是要得到其返回值,并且在调用结束后,在主调过
程中使用这个返回值。调用函数的常用格式是:【格式】<函数名>[(<实际参数表>)]【说明】如果需要传递参数,<实际参数
表>的声明与子过程相同,但必须加上一对圆括号;如果不传递参数,就直接以函数名调用,可以默认圆括号。对函数调用是为了使用其返回值,因
此,可以把函数调用及返回值的引用当成是对运算量的引用,函数也能够像运算量一样参与运算,甚至作为其他语句的参数。VisualBa
sic中也允许使用Call语句调用函数,其格式为:【格式】Call<函数名>([<实际参数表>])对函数的调用以
一条语句的形式出现,但即便函数有确定的返回值,该返回值都会被放弃而不能发挥作用,这时的函数就差不多等同于一个子程序了。二、函数
使用实例要创建一个函数,打开代码窗口后,选择“工具”菜单中的“添加过程”命令,打开“添加过程”对话框,辅
助用户建立函数的开始和结束语句。在“名称”栏输入函数名;选择“类型”单选框中的“函数”项;针对函数的使用范围选择“范围”单选框中的
“公有的”或“私有的”单选按钮;然后决定是否选择“所有本地变量为静态变量”项,假如选定该项,确定后,代码窗口中就会自动出现已定义好
的开始和结束语句。然后用户就可以在开始和结束语句之间按功能输入函数体,注意对返回值的定义。例题1:定义一个名为area的私有
函数,根据半径计算圆的面积。PrivateSubCommand1_Click()DimsAsSingleD
imaAsSinglea=3s=area(1) ''
①PrintsPrintarea(2) ''②Ifarea(A)>20Th
en ''③Print"Area>20"EndIfEndSubPrivateFunction
area(rAsSingle)area=3.14rr ''④EndFunction例题1说
明函数area的函数体只有一条语句④,定义其返回值。而在Command1_Click过程中有3处对are
a函数的调用:出现在①处的表达式中,出现在②处的语句中,出现在③处的判断语句的条件判断表达式中。例题1说明如果将上面的函数改
成无参调用:PrivateFunctionarea()DimrAsSingler=2area=
3.14rrEndFunction在调用该函数时,圆括号可有可无。例如:s=areaPrintare
a()例题2:采用函数调用的方式输出菲波那奇数列的前10个元素。PrivateSubCommand1_Click()
Dimn,iAsIntegern=InputBox("输出数列前几个元素?","菲波那奇数列")Fo
ri=1TonForm1.Printfib(i);NextiEndSubPublicFunc
tionfib(mAsInteger)Dimi,f1,f2,f3AsIntegerf1=1
f2=1Ifm=1Orm=2Thenfib=1ElseFori=3
Tomf3=f1+f2f1=f2f2=f3Nexti
fib=f3EndIfEndFunction例题2说明在函数调用的实现方式中,每调
用一次fibona函数,就会进行数列中一个元素的计算,并将计算结果返回到事件过程Command1_Click()中。因此,要输出前
n个元素,需要通过循环语句控制调用n次fibona函数,并输出每次调用后的结果。第九章VisualBA
SIC程序设计本章内容:1.代码模块的类型2.子过程的创建与调用3.事件过程与函数过程重点:子程序、事件
过程、函数过程的调用难点:过程的调用中,数据的传递和使用应用程序工程文件(.vbp)窗体模块(.frm)文件类模块
(.cls)文件标准模块(.bas)文件Function过程Sub过程事件过程Function过程Sub过程
在VB中,子程序又称为通用过程,是完成特定功能的子过程,必须由应用程序来调用,一般用Call语句调用子程序。一
、子程序的创建1.子程序的定义:【格式】[Private|Public][Static]Sub<子程序名>([<形式参
数表>])<过程体>EndSub9.2子程序“添加过程”对话框(3
)根据子程序的功能,在代码窗口中输入过程体代码。利用子程序调用的方式输出菲波那奇数列的元素。执行两次,分别输出前
6个和前10个元素。举例代码窗口【说明】程序中出现了两个过程:事件过程Command1_Click
和子程序fibona;注意调用发生时的参数传递。注意:ExitSub与EndSub的区别;不能使用GoSub、GoTo或Return来进入或退出子程序。【说明】调用子程序是一个单独的语句,独占一行。Call是可选关键字,如果使用Call来调用一个需要参数的过程,调用过程名后必须跟上带括号的参数表。如果默认Call关键字,省略参数表的括号。参数表是传递给过程的变量、数组或表达式的列表,各参数之间以逗号隔开。例如:以下两个语句都是调用名为Proc且带有两个参数的子程序,它们的作用是相同。CallProc(Argu1,Argu2)ProcArgu1,Argu2(a)标准模块的建立(b)事件过程和窗体模块(c)标准模块中的过程【格式】<类实例变量>.<过程名>[(<实际参数表>)]工程窗口定义全局变量被计算的数据赋值给类的两个属性
献花(0)
+1
(本文系信检彭博海...首藏)