资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,*,*,4.2,过程,过程是一段程序代码,是相对独立的逻辑模块。,一个完整的,VB,应用程序由若干过程和模块组成。,常用的,VB,过程有:,Sub,过程和,Function,过程,。,Sub,过程,(,子过程,),:完成一定的操作和功能,无返回值,通过程序调用和事件触发而执行,分为事件过程和通用过程。,Function,过程,(,函数过程,),:相当于用户自定义的函数,通过程序调用才能被执行,并且可将数据处理的结果返回。,一个过程的代码长度不要超过,64K,。,返回目录,4.2,过程,Sub,过程,过程定义格式:,Private|PublicStaticSub,过程名,(,参数表,),语 句,End Sub,Private,表示模块级子过程,,Public,表示全局级子过程,(,缺省值,),。,Static,表示过程内部定义的变量值在整个程序运行期间被保留。,过程名,符合,VB,标识符,的命名约定,参数表可以是空表,也可以放置若干个变量,(,形式参数,),。如:,Public Sub Sum(X As Integer,Y As Integer,Z As Integer),Sub,过程分为:事件过程和通用过程,返回目录,4.2,过程,Sub,过程,1.,事件过程,这类过程与对象有关,对象事件触发后被调用。,事件过程的过程名由系统自动指定。,建立对象的事件过程:,(1),进入代码窗口,方法,1,:双击对象,方法,2,:“视图,代码窗口”,(2),选择,“,对象”和“事件过程”,,,系统,自动形成该事件过程的头和尾,(3),编写该事件的程序代码,返回目录,“对象”,“事件过程”,4.2,过程,Sub,过程,2.,通用,Sub,过程,这类过程不与对象相关,是用户创建的一段共享代码。,过程的名称由用户自己命,建立通用,Sub,过程:,(1),建立过程框架,方法,1,:,在模块的“通用”段中输入,过程名,按回车后系统自动添加,End Sub,。,方法,2,:,“工具,添加过程”,(2),编写该过程的程序代码,返回目录,4.2,过程,Sub,过程,3.,过程的调用方法,(1),通用,Sub,过程的两种调用方式:,Call,过程名,(,参数表,),过程名 参数表,(2),事件过程的调用,一般由事件的触发而引起,(,单击、窗体加载等,),也可以象通用,Sub,过程那样调用,如:,Private Sub,Form_DblClick,(),Call,Command1_Click,End Sub,返回目录,4.2,过程,Sub,过程,例,4.19,用随机函数生成表中数据,计算总分并输出。,表格横线用通用过程,Print_Line,绘出,在主程序中多次调用,Private Sub,Print_Line,(),Dim I As Integer,Print Tab(10);,For I=1 To,25,Print-;,Next I,Print,End Sub,返回目录,定长,4.2,过程,Sub,过程,Private Sub Command1_Click(),单击“输出”,定义数组和变量,For I=1 To 5,用随机函数生成表中数据,Next I,Print_Line,调用画线过程,Print Tab(10);,数学,;Tab(20);,物理,;Tab(30);,化学,Print_Line,调用画线过程,For I=1 To 5,打印表中数据,并统计各科总分,Next I,Print_Line,调用画线过程,Print Tab(10);Math(0);Tab(20);Phy(0);Tab(30);Chem(0),Print_Line,调用画线过程,End Sub,返回目录,4.2,过程,Sub,过程,将,Print_Line,过程改写如下:,Private Sub,Print_Line,(,n As Integer,),Dim I As Integer,Print Tab(10);,For I=1 To,n,Print-;,Next I,Print,End Sub,返回目录,调用语句改为:,Print_Line,实参,或,Call Print_Line(,实参,),例如,,Print_Line 30,或,Call Print_Line(30,),n,为形参,调用过程时,实参将值交给形参,由形参带入子过程中执行。,4.2,过程,Sub,过程,例,4.20,用不同的方式分别调用带有形式参数的求和通用,过程,Add,和求差通用过程,Subst,返回目录,Private Sub Command1_Click(),Dim X%,Y%,X=,InputBox,(,请输入数据,),Y=,InputBox,(,请输入数据,),Call Add(,X,Y,),调用求和通用过程,Subst,X,Y,调用求差通用过程,End Sub,Sub Add(,A,B,),Dim C%,C=A+B:Print C,End Sub,Sub,Subst(,A,B,),Dim C%,C=A-B:Print C,End Sub,4.2,过程,Function,过程,Function,过程的实质是一个自定义函数,定义格式:,Private|PublicStaticFunction,函数过程名,(,参数表,),类型,语句,End Function,Private,、,Public,、,Statc,及参数的含义同,Sub,子过程,Function,过程,具有函数值,,类型缺省为变体型,,由函数过程名返回。,Function,过程的建立与,Sub,过程的建立相似,调用方法:,用,Call,语句,将,Function,返回值赋给一个变量,将,Function,过程,的返回值用在表达式中,返回目录,4.2,过程,Function,过程,例,4.21,计算,Private Sub Command1_Click(),Dim I As Integer,Dim,e As Single,F As Long,For I=0 To 10,F=,Factorial,(,I,),计算,I!,e=e+1/F,Next I,Print e=;e,End Sub,返回目录,Function,Factorial,(,X As Integer,)As Long,Dim I As Integer,T As Long,T=1,For I=1 To X,计算,X!,T=T*I,Next I,Factorial=,T,End Function,计算阶乘的函数过程,4.2,过程,参数传递,在,调用,Sub,过程和,Function,过程时,参数的传递有两种方式:按值传递、按地址传递,1.,按值传递,主调过程的实参与被调过程的形参,各有自己的存储单元,调用时:主调过程的实参值复制给被调过程的形参,定义被调过程时,各形参前加,ByVal,2.,按地址传递,主调过程的实参与被调过程的形参,共享同一存储单元,形式参数与实际参数是同一个变量,定义被调过程时,各形参前加,ByRef,定义过程时,,缺省,的参数传递方式是,按地址传递,返回目录,4.2,过程,参数传递,例,4.23/4.24,参数传递示例,返回目录,Sub Command1_Click(),Dim A%,B%,A=100:B=900,Print A=;A,B=;B,Print,Call,Exchange1(A,B),Print A=;A,B=;B,Print,Call,Exchange2(A,B),Print A=;A,B=;B,End Sub,Sub,Exchange1(,ByVal,X%,ByVal,Y%),T=X:X=Y:Y=T,Print X=;X,Y=;Y,End Sub,Sub,Exchange2(,ByRef,X%,ByRef,Y%),T=X:X=Y:Y=T,Print X=;X,Y=;Y,End Sub,4.2,过程,参数传递,3.,数组作为参数值的传递方式,数组参数只能按地址传递,在实参和形参中无需说明数组的维数,数组的上界和下界可用,Lbound,(),和,Ubound,(),函数测出,返回目录,例,4.25,将一个数值型一维数组按升序排序输出,排序在通用过程,Sort,中进行,采用选择法排序。,4.2,过程,参数传递,Private Sub Command1_Click(),Dim Data(5 To 14)As Integer,定义,5-14,为有效的下标范围,Dim I%,For I=5 To 14,数组赋值,Data(I)=30-I,Next I,Print,排序前:,For I=5 To 14,Print Data(I);,Next I,Print:Print,排序后:,Call Sort(,Data(),),For I=5 To 14,Print Data(I);,Next I,End Sub,返回目录,Private Sub Sort(,Element(),As Integer),Dim I%,J%,T%,For I=,LBound(Element,),To,UBound(Element,),1,For J=I+1 To,UBound(Element,),If Element(I)Element(J)Then,T=Element(I),Element(I)=Element(J),Element(J)=T,End If,Next J,Next I,End Sub,4.2,过程,作用域,变量的作用域指定义的变量能有效发挥其作用的范围。,变量按其作用域可分为局部变量,(,过程级,),、模块变量,(,模块级,),和全局变量,(,全局级,),对过程而言,也有,模块级过程,和,全局级过程,之分,1.,模块级过程,在一个窗体模块中以,Private,定义的过程为模块级过程,可为模块内的各个过程引用。,2.,全局级过程,在一个窗体模块中以,Public,定义的过程为全局级过程,其他窗体可通过“,窗体模块名,.,过程名,”引用;在标准模块中定义的全局过程可,直接通过过程名,引用。,返回目录,4.2,过程,作用域,例,4.26,在标准模块中建立可将窗口居中安放的全局级过程,,窗体启动时即调用该过程。,(1),“,工程,添加模块”,添加标准模块,(2),在标准模块代码窗口建立全局过程,CenterOnSetupForm,返回目录,4.2,过程,作用域,(3),编写,Form1,窗体的,Load,事件响应代码:一启动即调用过程。,CenterOnSetupForm,返回目录,4.3,Shell,函数,作用:运行一个,Windows,或,DOS,可执行程序。如果程序存在并且执行成功,则返回一个标识号,(ID),,,否则返回,0,。,语法格式:,Shell(,路径名,窗口方式,),例如,,Private Sub Command1_Click(),X=,Shell(c:windowspbrush.exe,1),End Sub,返回目录,见教材表,4.1,
展开阅读全文