1、第七章过程 所谓过程,就是指具有特定书写格式,包含若干可作为一个整体被执行的代码行的组合。根据执行的方式,可把过程分为事件过程和通用过程。针对由用户或系统引发的事件,事先编写好的用于改变对象的状态和行为、对相关的信息进行处理的程序代码段称为事件过程。一个应用程序中的多个窗体可以共享一些代码,或者一个窗体内不同的事件过程可以共享一些代码。为减少编写代码的工作量和使程序结构更加清晰,可以将这些被共享的代码单独设计为一个过程,这个过程称为“通用过程”。通用过程又分为Sub过程和Function过程。7.1 Sub过程vSub过程的定义格式 访问权限 Sub (形参列表)变量说明语句Exit Sub/
2、结束过程执行,返回调用处语句End Sub访问权限:Public 或 Private 或 StaticvSub过程的创建 方法一:执行菜单命令:视图|代码窗口,出现代码编辑器,再执行菜单命令:工具|添加过程,出现“添加过程”对话窗口。方法二:打开代码编辑器,直接在通用模块声明段输入相应代码。vSub过程的调用 Call (实参)实参 1.输入一个字符串,逆序输出。(P160)Private Sub invert(x As String,y As String)Call invert(a,b)2.计算S=1!+2!+N!(P161)Private Sub jc(n As Integer,t As
3、 Long)jc i,t7.2 Function过程v函数过程的定义访问权限 Function(形参列表)As 数据类型变量说明语句函数名=表达式Exit Function语句End Fuction 建立函数的方法和建立通用过程的方法基本相同。v函数过程的调用 Call(实参)或 (实参)调用函数时,参数的传递方式和调用通用过程相同。例:定义变量数据交换函数 swap()Function Swap(x As Integer,y As Integer)As Integer Dim Temp As Integer Temp=x x=y y=TempEnd Function Function are
4、a(a As Single,b As Single,c As Single)As Single Dim s As Single s=(a+b+c)/2 area=sqr(s*(s-a)*(s-b)*(s-c)End Function已知三角形三边,求三角形面积。(P163)Private Function jc(n As Integer)As Long Dim i%,t&t=1 For i=1 To n t=t*i Next i jc=t End Function求阶乘。(P164)7.3 事件过程v事件过程定义格式Private Sub Form_ 事件名(参数列表)局部变量和常数声明 语句
5、块End Sub Private Sub 控件名 _ 事件名(参数列表)局部变量和常数声明 语句块End Sub 窗体事件过程控件事件过程v事件过程的调用:Call 控件名_事件名例:调用command1的click事件过程 Private Sub Command1_Click()Picture1.Print“Hello”End Sub Call Command1_Click7.4 Sub Main过程vSub Main过程即启动过程,是VB中的一个特殊过程,主要用于在多窗体操作之前对一些条件进行初始化。v选择“工程”-“添加模块”,在标准模块窗口中输入Sub Main过程。v选择“工程”-“
6、工程属性”,在“通用”选项卡中设置启动对象为Sub Main过程。v设置后,运行程序时将首先执行Sub Main过程。7.5 参数传递v值传送(ByVal)ByVal:表示参数采用值传送方式;当形参的参数传递方式为值传送时,主调过程将首先为形参分配存储单元,然后将实参值复制给形参,被调过程执行中参与运算的均为形参。过程调用结束返回主调过程时,形参所对应的存储单元被释放,实参保持原来的值不变。如:计算圆面积 Private Sub Proc(ByVal r%,ByVal s!)(P167)v地址传递或引用传递(ByRef)ByRef:表示参数采用地址传递或引用传递方式,为默认传递方式。当形参的参
7、数传递方式为地址传递时,主调过程将不给给形参分配新的存储空间,而只是将实参的地址传给形参,即形参与实参共用同一存储空间。因此,被调过程执行中对形参的修改,实际就是对实参的修改。v按地址传递,实参必须是变量,如果实参是常量或表达式,则一律按值传递。v可选参数 定义过程时,在参数前加了Optional关键字,则该参数是可选参数。可选参数必须排在参数表的后面。过程调用时,对应可选参数的实际参数可以给出,也可以不给出。可选参数在定义时可以设置默认值。如:Function f(a,b,Optional c%=8,Optional d%=9)f=1000*a+100*b+10*c+dEnd Functio
8、nv可变参数 定义过程时,可以定义一个长度不确定的数组为形式参数,过程调用时根据需要给出实参个数。可变参数以ParamArray关键字定义,只用于参数列表中的最后一个参数。如:Function f(ParamArray a()Dim sum As Integer For Each i In a sum=sum+i Next i f=sumEnd Functions=f(1,2,3,4,5)或s=f(1,2,3)v数组参数传递 数组作为参数时,形参定义格式为:()As 定义时,形参数组的大小可以不指明,但数组名后面的一对圆括号不能省略,否则系统认为形参是变量。数组作为参数时,调用格式为:()例:
9、求数组元素中的最大值和最小值。(P172)Sub proc(a(),max,min)n1=LBound(a)n2=UBound(a)max=a(n1)min=a(n1)For i=n1 to n2 If maxa(i)Then min=a(i)Next iEnd Sub Private Sub Command1_click()Dim a(1 to 20)As Integer For i=1 to 20 a(i)=Int(Rnd*100)Print a(i);Next I Print Call proc(a,a1,a2)Print“max=”;a1,”min=”;a2End Sub7.6 作用域
10、vVB应用程序结构VB 使用工程来管理构成应用程序的所有文件。模块是 VB将不同类型过程代码组织到一起的一种结构。窗体模块 应用程序中的每个窗体都有一个对应的窗体模块(也称窗体文件)。窗体模块不仅包含窗体及窗体内各种对象的属性设置,而且还包含用于处理发生在窗体中各个对象上的事件过程。一个 VB应用程序至少应包含一个窗体模块。标准模块 标准模块主要用于将应用程序中可被多个窗体共享的代码(通用过程)组织在一起,对于作用范围遍及应用程序各个模块的变量(全局变量),通常也定义在标准模块中。标准模块文件的扩展名为.bas。一个应用程序可以没有标准模块,也可以包含多个标准模块。类模块类模块用于定义类的数据
11、成员(属性)和成员函数(方法)。v变量的作用域 变量的作用域是指变量的有效范围,根据变量说明方式的不同,变量有三个作用域 使用关键字 Static定义的局部变量称为静态变量。程序开始运行时即给静态变量分配存储空间,直到程序运行结束,空间才被释放。如果在函数名或过程名前加上Static,则其中的变量均为静态变量。局部变量 Private Sub Command1_click()Dim x%,y%x=5:y=5 x=f(y)Print“x=”;x,”y=”;yEnd subFunction f(x%)y=2 f=x*y Print“x=”;x,”y=”;yEnd Function模块级变量 Pri
12、vate x%Private Sub Command1_click()x=x+1 Cls Print“已单击按钮次数:”;xEnd subPrivate Sub Command2_click()x=x+1 Cls Print“已单击按钮次数:”;xEnd sub全局变量 Public x%Private Sub Command1_Click()x=x+1 Print“已单击按钮次数:”;x Form2.ShowEnd subPrivate Sub Command1_Click()Form1.x=form1.x+1 Print“已单击按钮次数:”;x Form1.ShowEnd subForm1
13、窗体模块Form2窗体模块全局变量与局部变量同名 Public a%,b%Private Sub Command1_Click()Dim a%Print“已单击按钮次数:”;x a=a+1 b=b+1 Print“a=”;a,“b=”;bEnd sub静态变量 Private Sub Command1_click()Dim i%For i=1 to 4 Print sum(i),Next iEnd subPrivate Function sum(x%)Static t%t=t+x sum=tEnd subv过程的作用域 根据过程的定义位置与方式的不同,过程可分为模块级过程和全局级过程。模块级过
14、程 使用关键字Private或Static定义的过程为模块级过程。模块级过程的作用范围是创建该过程的模块。若用Static声明,则该过程中的所有变量均为静态变量。全局级过程 在窗体模块或标准模块中用关键字Public声明或缺省关键字声明的过程,称为全局级过程。其作用域是整个应用程序。7.7 过程应用举例 例:查找问题(P179)Public Function search(a()As Integer,ByVal key)Dim i As Integer For i=LBound(a)To UBound(a)If key=a(i)Then search=i Exit Function End If Next i search=-1End Function
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。