ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:136.13KB ,
资源ID:6218037      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6218037.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第5章 使用过程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第5章 使用过程.docx

1、第5章 使用过程第5章 使用过程在开发Visual Basic应用程序时,通过工程(Project)来管理构成应用程序的所有不同的文件,Visual Basic的代码存储在不同的模块文件中。在设计一个规模较大、功能较复杂的程序时,往往需要按功能将程序分解成若干个相对独立的部件,Visual Basic称这些部件为过程,对每个部件分别编写程序,可以简化程序设计任务。Visual Basic工程文件(.vbp)包含了组成应用程序的所有窗体文件(.frm)、标准模块文件(.bas)、类模块文件(.cls)及其他文件,也包含环境设置方面的信息,如图5.1所示。图5.1 VB应用程序的结构窗体模块、标准

2、模块和类模块都可以包含声明和过程,它们形成了工程的一种模块层次结构,可以较好地组织工程,同时也便于代码的维护。1. 窗体模块(.frm)每个窗体对应一个窗体模块,窗体模块包含窗体、控件的描述和属性设置,也含有窗体级的常数、变量、外部过程声明,以及事件过程和通用过程。窗体模块保存在扩展名为.frm的文件中。默认时应用程序中只有一个窗体,因此有一个以.frm为扩展名的窗体模块文件。如果应用程序有多个窗体,就会有多个以.frm为扩展名的窗体模块文件。添加新窗体的步骤是从“工程”菜单中执行“添加窗体”命令,则打开“添加窗体”对话框中的“新建”选项卡。在该对话框中双击需要添加的窗体类型,新建的窗体将出现

3、在工程窗口中。2. 标准模块(.bas)简单的应用程序通常只有一个窗体,这时所有的代码都存放在该窗体模块中。而当应用程序庞大而复杂时,就需要多个窗体。在多窗体结构的应用程序中,有些程序员创建的通用过程需要在多个不同的窗体中共用,为了不在每个需要调用该通用过程的窗体重复键入代码,就需要创建标准模块。标准模块保存在扩展名为.bas的文件中,缺省时应用程序中不包含标准模块。标准模块可以包含常数、类型、变量和过程的声明,以及过程代码。在工程中添加标准模块的步骤为:(1) 从“工程”菜单中执行“添加模块”命令,则打开“添加模块”对话框中的“新建”选项卡,如图5.2所示。 图5.2 添加模块对话框 图5.

4、3 新建标准模块窗口(2) 在该对话框中双击“模块”图标,将打开新建标准模块窗口,如图5.3所示。(3) 在属性窗口修改该模块的“名称”属性(只有此属性),给模块命令,接下来就是在标准模块的代码窗口中,向模块添加过程。3. 类模块(.cls)类模块用于建立新对象,这些新对象可以包含自定义的属性和方法,类模块既包含代码又包含数据,它可以被应用程序内的过程调用。实际上,窗体本身正是这样一种类模块,在其上可安放控件、可显示窗体窗口。第1节 Sub过程Sub过程可以放在标准模块和窗体模块中,Visual Basic的Sub过程分为事件过程和通用过程两大类。事件过程是当发生某个事件时,对该事件做出响应的

5、程序段,它是Visual Basic应用程序的主体。有时多个不同的事件过程可能需要使用同一段程序代码,为此,可将这段代码独立出来,编写成一个共用的过程,这种过程通常称为通用过程,它独立于事件过程之外,可供其他事件过程调用。5.1.1 事件过程事件过程由Visual Basic自行声明,用户不能增加或删除。当用户对某个对象发出一个动作时,Windows会通知Visual Basic产生了一个事件,Visual Basic会自动调用与该事件相关的事件过程。事件过程是附加在窗体和控件上的,通常总是处于空闲状态,直到响应用户引发的事件或系统引发的事件才被调用。1. 窗体事件过程窗体事件过程定义为“Fo

6、rm_事件名”,其格式为:Private Sub Form_ (参数表)语句组End Sub不管窗体名字如何定义,但在事件过程中只能使用Form,而在程序中对窗体进行引用才会用到窗体名字。如果正在使用MDI(Multiple Document Interface)窗体,则事件过程定义为“MDIForm_事件名”。例如,运行程序后,单击窗体即会隐藏(窗体名称设为FormHide)的代码为:Private Sub Form_click()FormHide.ShowHideEnd Sub2. 控件事件过程控件事件过程的定义是“控件名_事件名”,其格式为:Private Sub _ (参数表)语句组E

7、nd Sub例如,一个命令按钮的单击事件过程代码如下:Private Sub Command1_Click()Text1.Text = 你好!End Sub在代码编辑器窗口建立事件过程,代码窗口会自动显示Visual Basic的保留字,这样可以看出哪些是自己的编码。打开代码编辑器窗口有以下几种方法: 在设计窗体上双击窗体或控件,就打开了代码编辑器窗口,并会出现该窗体或控件的默认过程代码。 单击工程资源管理器窗口的“查看代码”按钮,再从对象列表框中选择一个对象,从过程列表框中选择一个过程。 可以自己编写事件过程,在代码编辑器窗口中直接编写事件过程。在代码窗口中不要随意改变事件或对象名称,如果想

8、改变对象名称,则应该通过属性窗口来改变。5.1.2 创建通用过程当几个不同的事件过程要执行同样的动作,为了不必重复编写代码,可以采用通用过程来实现,由事件过程调用通用过程。通用过程既可保存在窗体模块中,也可以保存在标准模块中。通常一个通用过程并不和用户界面中的对象联系,通用过程直到被调用时才起作用。因此,事件过程是必要的,但通用过程不是必要的,只是为了程序员方便而单独建立的。通用过程与事件过程不同,通用过程并不是由对象的某种事件激活,也不依附于某一对象,故其创建的方法略有区别。建立通用过程有两种方法:直接在代码编辑窗口中输入过程代码、或使用添加过程对话框。1. 在代码编辑窗口中输入在代码编辑窗

9、口中,把光标定位在已有过程的外面,然后直接输入通用过程代码。其语法格式为:Private|Public Static Sub (参数表)语句列Exit Sub语句列End Sub说明:(1) Private和Public:用来声明该Sub过程是私有的(局部的),还是公有的(全局的)。系 统默认为Public,即可在应用程序中随意调用它们。但如果声明为Private,则只有该过程所在模块中的程序才能调用该过程。(2) Static:静态变量声明。如果使用Static关键字,则该过程中的所有局部变量的存储空间只分配一次,且这些变量的值在整个程序运行期间都存在,即在每次调用该过程时,各局部变量的值一

10、直存在。如果省略Static,过程每次被调用时重新为其变量分配存储空间,当该过程结束时释放其变量的存储空间。(3) 过程名:与变量名的命名规则相同。在同一模块中,同一过程不能既用于Sub过程,又用于Function过程。(4) 参数表:类似于变量声明,它指明了调用过程传递给过程的变量个数和类型,称为形式参数(简称形参),各变量之间用逗号隔开。形参并不代表一个实际存在的变量,也没有固定的值,在调用此过程时它被一确定的值所代替。形参的格式为:Optional ByVal|ByRef|ParamArray () As 这里的Optional表示参数不是必需的关键字。如果使用了该选项,则参数表中的后续

11、参数都必须是可选的,而且必须都使用Optional关键字声明。如果使用了ParamArray,则任何参数都不能使用Optional。ByVal表示该参数按值传递,ByRef表示该参数按地址传递,ByRef是Visual Basic的缺省选项。ParamArray只用于参数表的最后一个参数,指明最后这个参数是一个Variant元素的Optional数组。使用ParamArray关键字可以提供任意数目的参数。ParamArray关键字不能与ByVal,ByRef或Optional一起使用。代表参数的变量的名称,遵循标准的变量命令约定。如果是数组变量,要在数组名后加上一对小括号。代表传递给该过程的参

12、数的数据类型,可以是Byte,Boolean,Integer,Long,Currency,Single,Double,Date,String(只支持变长),Object或Variant。如果没有选择参数Optional,则可以指定用户定义类型或对象类型。(5) 语句列:是Visual Basic的程序段,称为子程序体或过程体。在执行语句列时,可以使用Exit Sub从Sub过程中退出,以便执行该过程后续语句。(6) End Sub:用于结束本Sub过程。(7) 在过程内不能再定义过程,但可以调用其他过程。例如,可直接在代码编辑器中输入:Sub warning()Text1.Text = 警告E

13、nd Sub2. 使用添加过程对话框使用添加过程对话框建立过程的步骤为:(1) 打开要添加过程的代码编辑窗口。(2) 选择“工具”菜单的“添加过程”命令,打开“添加过程”对话框,如图5.4所示。(3) 在“名称”文本框中输入过程名,如Warning。从“类型”选项组中选择过程类型,如“子程序”。从“范围”选项组中选择范围,相当于使用Public或Private关键字,如选择“公有的”。图5.4 添加过程单击“确定”按钮后,则在代码编辑器窗口中就创建一个名为Warning的过程代码:Public Sub Warning()End Sub5.1.3 通用过程的调用要执行一个过程,必须调用该过程。每

14、次调用过程都会执行Sub和End Sub之间的语句列。Sub过程的调用有两种方式:Call (参数表)或 参数表说明:(1) 参数表:在调用语句中的参数称为实际参数(简称实参),实参可以是变量、常数、数组和表达式。参数与参数之间要用逗号隔开。(2) 使用Call语句调用时,参数必须放在括号内,当被调用过程没有参数时,则( )也可省略。(3) 用过程名调用时,过程名后不能加括号,若有参数,则参数直接跟在过程名之后,参数与过程名之间用空格隔开,参数与参数之间用逗号分隔。例如,对过程Sub Stars1( )与Sub Stars2(m)可采用如下方式调用:Call Stars1Stars1Call

15、Stars2(20)Stars2 20在大多数情况下,通常是在事件过程中调用过程。但由于事件过程也是过程(Sub过程),因此也可以被其他过程调用。【例5.1】 求S=5!+7!+9!的值。分析:要计算S=5!+7!+9!,先要分别计算出5!,7!和9!。由于3个求阶乘的运算过程完全相同,因此可以用通过Sub Fact过程来计算任意阶乘n!,每次调用Fact过程前给n一个值,在Sub过程中将所求结果放入到total变量中,返回主程序后tot变量接收total的值。这样3次调用子程序便可求得S。Fact通用过程为:Sub Fact(ByVal n As Integer, total As Long

16、)Dim i As Integertotal = 1For i = 1 To n total = total * iNext iEnd Sub命令按钮的Click事件代码为:Private Sub Command1_Click()Dim a, b, c As IntegerDim tot As Longa = 5: b = 7: c = 9Call Fact(a, tot)s = totCall Fact(b, tot)s = s + totFact c, tots = s + totText1.Text = sEnd Sub单击命令按钮,运行结果如图5.5所示。图5.5 计算阶乘法结果第2节

17、 Function过程函数是过程的另一种形式,当过程的执行返回一个值时,使用函数就比较简单。Visual Basic包含了许多内部的函数,如sin,date,chr等。用户在编写程序时,只需写出一个函数名并给定参数就能得出函数值。当在程序中需要多次用到某一公式或要处理某一函数关系,而又没有现成的内部函数可使用时,Visual Basic允许使用Function语句编写用户自定义的Function(函数)过程。5.2.1 Function过程的定义与Sub过程一样,Function过程也是一个独立的过程,可读取参数、执行一系列语句并改变其参数的值。与Sub过程不同的是,Function过程可返回

18、一个值到调用的过程。Function过程的格式为:Private | Public Static Function (参数表) As 语句列函数名=表达式Exit Function语句列函数名=表达式End Function说明:(1) As :函数返回值的数据类型,与变量一样,如果没有As子句,默认的数据类型为Variant。(2) Exit Function语句:用于提前从Function过程中退出,程序接着从调用该Function过程语句的下一条语句继续执行。在Function过程的任何位置都可以有Exit Function语句。但用户退出函数之前,应保证为函数赋值,否则会出错。(3)

19、函数名=表达式:在函数体中用该语句给函数赋值,如果在Function过程中默认该语句,则该Function过程的返回值为数据类型的默认值。例如,数值函数返回值为0,字符串函数返回值为空字符串。(4) 和Sub过程一样,Function过程不能嵌套定义,但可以嵌套调用。例如,下面是计算直角三角形第三边(斜边)的函数,函数名为Hypotenuse,数据值的数据类型为Integer,函数的形参为直角三角形两直角边A和B,返回值为斜边的值,Function过程代码如下:Function Hypotenuse(A As Integer, B As Integer) As Integer Hypotenu

20、se = Sqr(A 2 + B 2)End Function与Sub过程一样,既可以直接从代码编辑窗口中输入过程代码,也可以使用添加过程对话框来定义Function过程。由于函数具有返回值,还需对系统自动产生的函数过程进行适当的修改,即在过程名后面加上对其返回值类型的定义和说明。5.2.2 Function过程的调用调用函数Function过程的方法和调用Visual Basic内部函数方法一样,在语句中直接使用函数名,Function过程可返回一个值到调用的过程。其格式为:Function 函数名(参数表)例如,下面的代码调用了计算直角三角形斜边的Function过程:Text1.Text

21、 = Hypotenuse(3, 4)另外,采用调用Sub过程的语法也能调用Function函数。当用这种方法调用函数时,放弃函数的返回值。例如,下面的代码调用了同一个Function过程:Call Hypotenuse(3, 4)Hypotenuse 3, 4函数可以没有参数,在调用无参函数时不发生虚实结合。调用无参函数得到一个固定的值,如下述无参函数:Function FA1() FA1 = 我们的任务完成了!End Function【例5.2】 用函数调用编写求两个自然数的最大公约数的程序。分析:求最大公约数可以用“辗转相除法”,方法如下:(1) 以大数m做被除数,小数n做除数,相除后得

22、余数r。(2) 若r0,则mn,nr,继续相除得到新的r。若仍有r0,则重复此过程,直到r=0为止。(3) 最后的n就是最大公约数。根据此算法,首先设计一个求两个自然数最大公约数的Function过程Divisor,如下:Function Divisor(ByVal x As Integer, ByVal y As Integer) As IntegerDim r, c As IntegerIf x y Then c = x: x = y: y = cEnd Ifr = x Mod yDo While r 0 x = y y = r r = x Mod yLoopDivisor = yEnd

23、Function应用程序的用户界面设置如图5.6所示。命令按钮的Click事件代码为:Private Sub Command1_Click()Dim m, n As Integerm = Val(Text1.Text)n = Val(Text2.Text)If m * n = 0 Then Exit SubLabel1.Caption = 自然数 & Str(m) & 和 & _Str(n) & 的最大公约数是: & Str(Divisor(m, n)End Sub图5.6 求最大公约数在Text1和Text2中输入两个整数m和n,单击Command1_Click事件,调用Divisor函数,

24、m和n传递给Divisor函数,Divisor函数计算的结果返回给Command1_Click事件过程,并将结果显示在Label1中。第3节 参数传送调用过程时可以把数据传递给过程,也可以把过程中的数据传递回来。在调用过程时,需考虑调用过程和被调用过程之间的数据是如何传递的。通常在编制一个过程时,应考虑需要输入哪些数据,进行处理后输出哪些数据。正确地为一个过程提供输入数据和正确地引用其输出数据,是使用过程的关键,也就是调用过程和被调用过程之间的数据传递问题。在调用一个有参数的过程时,首先进行的是形参与实参的结合,实现调用过程的实参与被调用过程的形参之间的数据传递,数据传递有两种方式:按值传递和

25、按地址传递。5.3.1 形参与实参在被调用过程中的参数是形参,出现在Sub过程和Function过程中。在过程被调用之前,形参并未被分配内存,只是说明形参的类型和在过程中的作用。形参列表中的各参数之间用逗号分隔,形参可以是变量名和数组名,但不能是定长字符串变量。实参是在主调过程中的参数,在过程调用时实参将数据传递给形参。实参表可由常量、表达式、有效的变量名、数组名组成,实参表中各参数用逗号分隔。在调用过程时,实参被插入形参中的各变量处进行“形实结合”,形实结合是按位置结合的,即第一个实参与第一个形参结合,第二个实参与第二个形参结合,依此类推。例如:形参列表和实参列表中的对应变量名可以不同,但实

26、参和形参的个数、顺序以及数据类型必须相符。所谓类型相符,对于变量参数就是类型相同,对于值参数则要求实际参数对形式参数赋值相容。若在过程的形参表中列入了Optional关键字,则可以指定过程的形式参数为可选参数。如果某一参数为可选参数,则参数表中此参数后面的其他参数也必须是可选的,并要用Optional来声明。例如,我们建立一个计算两个数据的乘积的过程,它能可选择地乘以第三个数。在调用时,既可以给它传递两个参数,也可给它传递3个参数。为了定义带可选参数的过程,必须在参数表中使用Optional关键字,并在过程体中通过IsMissing函数来测试调用时是否传递可选参数。过程代码为:Sub Mult

27、i(fir As Integer, sec As Integer, Optional thir)n = fir * secIf Not IsMissing(thir) Then n = n * thirEnd IfPrint nEnd Sub在调用上面的过程时,可以提供两个参数,也可提供3个参数,都能得到正确的结果。例如,如果用下述事件过程调用:Private Sub Form_Click()Multi 10, 20End Sub结果为200。如果用下述过程调用:Private Sub Form_Click()Multi 10, 20, 30End Sub结果为6000。上述过程只有一个可选参

28、数,也可以有两个或多个。但应注意,可选参数必须在参数的最后,且一般为Variant类型。另外,还可给可选参数指定缺省值,如Multi过程可改为:Sub Multi(fir As Integer, sec As Integer, Optional thir As Integer = 30)End Sub一般来说,过程调用中的参数个数应等于过程说明的参数个数。如果使用ParamArray关键字,则过程可以接受任意个数的参数。例如,我们可以定义一个可变参数过程,用这个过程可以求任意多个数的乘积。Sub Multi(ParamArray Numbers()n = 1For Each x In Numb

29、ers n = n * xNext xPrint nEnd Sub可以用任意个参数调用上述过程,如:Private Sub Form_Click()Multi 3, 4, 5, 6, 7End Sub输出结果为2520。5.3.2 值传递与地址传递传递参数的方式有两种:如果调用语句中的实际参数是常量或表达式,或定义过程时选用ByVal关键字,就可以按值传递。如果调用语句中实际参数为变量,或定义过程时选用ByRef关键字,就可以按地址传递。1. 按值传递参数按值传递参数时,Visual Basic给传递的形参分配一个临时的内存单元,将实参的值传递到这个临时单元去。实参向形参传递是单向的,如果在被

30、调用的过程中改变了形参值,则只是临时单元的值变动,不会影响实参变量本身。当被调用过程结束返回主调过程时,Visual Basic将释放形参的临时内存单元。当要求变量按值传递时,可以先把变量变成一个表达式,把变量转换成表达式的最简单的方法就是把它放在括号内。例如把变量“A”用括号括起来,“(A)”就成为一个表达式了。或者定义过程时用ByVal关键字指出参数是按值来传递的。【例5.3】 用函数过程编写程序,求a,b两数中最大数。Max函数为求最大数,在Command1_click中调用Max函数,程序代码如下:Private Function Max(ByVal x As Integer, ByV

31、al y As Integer) Dim z As IntegerIf x y Then z = x: x = y: y = zMax = xTextX.Text = xTextY.Text = yEnd FunctionPrivate Sub Command1_Click()Dim a As Integer, b As Integer, c As Integera = Val(TextA.Text)b = Val(TextB.Text)TextMax.Text = Max(a, b)TextRA.Text = aTextRB.Text = bEnd Sub在文本框中输入变量a为25、b为36,单击“计算”按钮,程序运行结果如图5.7所示。 图

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1