第09章 VB过程.ppt_第1页
第09章 VB过程.ppt_第2页
第09章 VB过程.ppt_第3页
第09章 VB过程.ppt_第4页
第09章 VB过程.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一节Sub过程,第九章 过程,VB应用程序是由过程组成的。多个不同的事件过程可能需要使用一段相同的程序代码,因此可以把这一段代码独立出来,作为一个过程“通用过程”。,VB中通用过程分为两类,即子程序过程和函数过程。前者叫Sub过程,后者叫Function过程。,第一节Sub 过程,一、建立Sub过程,格式:StaticPrivatePublicSub过程名(参数表列) 语句块Exit Sub语句块End Sub,1.Sub过程的定义,说明: (1)Sub过程以Sub开头,以End Sub结束,在 Sub和End Sub之间是描述过程操作的语句块, 称为“过程体”或“子程序体”。,(2)每个S

2、ub过程必须有一个End Sub子句。 在过程内可以用一个或多个Exit Sub语句从 过程中退出。,(3)Sub过程不能嵌套。Sub过程内不能定义 Sub过程或Function过程;不能用GOTO语句 进入或转出一个Sub过程。, Static:指定过程中的局部变量在内存中的 默认存储方式。 Private:表示Sub过程是私有过程不能被其 他模块中的过程访问。 Public:表示Sub过程是公有过程在程序的 任何地方调用。 过程名:同一变量名不能用作Sub过程名又用 作Function过程名。 “参数表列”:含有在调用时传递给该过程的简 单变量名或数组名,各名字之间用逗号隔开。 格式:By

3、Val变量名()As数据类型,如果选ByVal则表明该参数是“传值”参数,缺省“引用”参数。,Sub Tryout(x As Integer, ByVal y As Integer) x = x + 100 y = y * 6 Print x, y End Sub,Sub ContinueQuery() Do Response$ = InputBox$(Y or N) If Response$ = N Or Response$ = n Then End If Response$ = Y Or Response$ = y Then Exit Do Loop End Sub,2.建立Sub过程,单

4、击“确定”,回到模块代码窗口。,方法一: “工程”| “添加模块” ,打开“添加模块”对话框,选择“新建”选项卡,双击“模块”图标,打开模块代码窗口。,“工具” | “添加过程” ,打开“添加过程”对话框。,在名称框内输入要建立的过程的名字。,选择要建立的过程的类型(“子程序”或“函数”),在范围内选择“公有的”(则所建立的过程可用于本工程内的所有窗体模块;)或“私有的”(则所建立的过程只能用于本标准模块)。,通用过程可在标准模块中建立,也可在窗体模块中建立。,方法二: 执行“工程”菜单中的“添加模块”命令,打开模 块代码窗口,然后键入过程的名字,并按回车键。,二、调用Sub过程,1.用Cal

5、l语句调用Sub过程,格式:Call 过程名(实际参数),Call语句把程序控制传递到一个Visual Basic的Sub过程。,2.把过程名作为一个语句来使用,在调用Sub过程时,省略关键字Call。 (1)去掉关键字Call。 (2)去掉“实际参数表”的括号。,例9.1 编写一个计算矩形面积的Sub过程,然后调用该过程计算矩形面积。,例9.2 编写一个用来延迟指定时间(秒)的Sub过程。调用这个过程,按指定的时间间隔显示若干行信息。,三、通用过程与事件过程,事件过程是一种特殊的Sub过程,它附加 在窗体和控件上。,控件:Private Sub 控件名_事件名(参数表) 语句组 End Su

6、b,窗体:Private Sub Form_事件名(参数表) 语句组 End Sub,1.事件过程,事件过程,事件驱动程序。,事件过程名由VB创建,不能被更改、删除, 事件过程的内容由编程人员设计编写。,不同对象,VB为其创建的事件过程不同。,事件过程存储在窗体模块中,缺省为私有的。,2.通用过程,通用过程可以放在标准模块中,也可以放 在窗体模块中,而事件过程只能放在窗体模块 中,不同模块中的过程(包括事件过程和通用过 程)可以互相调用。,格式:模块名.过程名(参数表),通用过程,通用过程是不与任何特定事件相联系的代码块, 必须由其它过程调用才能被执行。,通用过程可以存放在窗体模块或标准模块中

7、。,通用过程分为两类: 子过程(Sub) 函数过程(Function),第二节Function过程,一、建立Function过程,格式: StaticPrivatePublicFunction过程名 (参数表列)As类型语句块过程名=表达式Exit Function语句块End Function,说明: As类型可以是Integer、Long、Single、Double、 Currency或String,缺省则为Variant。 调用Function过程要返回一个值,因此可以像 内部函数一样在表达式中使用。 不能在事件过程中定义通用过程(包括Sub过程和 Function过程),只能在事件过程

8、内调用通用过程。,二、调用 Function 过程,在一般情况下,Function过程有一个返回值,可以像内部函数一样调用。但是,对于没有返回值的Function过程,其调用方式与Sub过程完全相同,而且也可以使用Call关键字。,例9.3 编写一个求最大公约数的函数过程。,例1: Function putInfo(s As String)If UCase(s) = AAAA ThenPrint aaaaElseIf UCase(s) = BBBB ThenPrint bbbbElsePrint ccccEnd IfEnd FunctionPrivate Sub Command1_Click(

9、)Dim SS As StringSS=InputBox(请输入一个字符串)Call putInfo(SS)End Sub,例2:求6的平方,Function Square(intSqu As Integer) As Integer Square=intSqu*intSqu End Function Sub cmdCommand1_Click() Dim intNewValue As Integer intNewValue=Square(6) Print 6的平方为: & intNewValue End Sub,例9.4 编写程序,打印01000之间的伪随机数,要打印的随机数的个数在运行时指定

10、,要求每5个打印一行,生成随机数的操作用一个Function过程来实现。,例9.5 从键盘上输入一个数,输出该数的平方根。,第三节参数传递,一、形参与实参,形参是在Sub、Function过程的定义中出 现的变量名,实参则是在调用Sub或Function 过程时传递给Sub或Function过程的常数、变 量、表达式或数组。,1.按位置传递,按位置传递是大多数语言处理子程序调用 时所使用的方式,在用这种方式传递参数时, 实际参数的次序必须和形式参数的次序相匹配, 也就是说,它们的位置次序必须一致 。,在传送参数时,形参表与实参表中对应变量的名字不必相同,但参数的个数必须相同;类型必须相同。,2

11、.指名传递,指名参数传递,就是显式地指出与形参结 合的实参,把形参用“:=”与实参连接起来。,指名传递方式不受位置次序的限制。,当参数较多,而且类型相似时,指名结合比 按位置结合出错的可能性要小一些。,二、引用,在VB中,参数通过两种方式传递,即传地 址和传值,其中传地址习惯上称为引用,引用 方式通过关键字ByRef来实现。,在默认情况下,变量(简单变量、数组或数 组元素以及记录)都是通过“引用”传递给Sub 或Function过程。,一般来说,传地址比传值更能节省内存和提 高效率。,例9. 6 编写程序,实验引用方式传送参数。,当通过引用来调用一个过程时,向该过程传送变 量,实际上是把变量的

12、地址传送给该过程,因此, 变量的地址和被调用过程中相应参数的地址是相 同的。,引用会改变实际参数的值。,三、传值,传值就是通过值传递实际参数,即传递实 参的值而不是传递它的地址。在这种情况下, 系统把需要传递的变量复制到一个临时单元中, 然后把该临时单元的地址传递给被调用的通用 过程。通过关键字ByVal来实现。,例9. 7 编写程序,实验过程的副作用。,如果形参前面有关键字ByVal ,则该参数用传 值方式传送,否则用引用(即传地址)方式传送。,传值方式中,形参是一个真正的局部变量。,1.传值,2.传值方式和传地址方式,(1)对于整型、长整型或单精度参数,如果不希望过程修改实参的值,则应加上

13、关键字ByVal(值传送)。而为了提高效率,字符串和数组应通过地址传送。,(2)对于对于其他数据类型,包括双精度型、货币型和变体型,可以用两种方式传送。最好用传值方式传送。,(3)如果没有把握,最好先用传值方式来传送所有变量。在程序正确运行后,再把部分参数改为传地址,以加快运行速度。,(4)用Function过程可以通过过程名返回值,但只能返回一个值;Sub过程不能通过过程名返回值,但可以通过参数返回值,并可以返回多个值。当需要用过程返回值时,其相应的参数要用传地址方式。,四、数组参数的传递,当用数组作为过程的参数时,使用的是“传 地址”方式,而不是“传值”方式,即不是把数组 的各元素的值一一

14、传递给过程,而是把数组的起 始地址传给过程,使过程中的数组与作为实参的 数组具有相同的起始地址。,注意: 为了把一个数组的全部元素传递给一个过程, 应将数组名分别放入实参数和形参表中,并 略去数组的上下界,但括号不能省略。,例9.8 编写程序,实现数组传送。,如果不需要把整个数组传递给通用过程,可 以只传递指定的单个元素,这需要在数组名 后面的括号中写上指定元素的下标。 LBound和Ubound函数用来确定传递给过程的 数组的大小。Lbound最小下标Ubound最大下标,例9.9 编写一个过程,求数组的最大值。,说明: 当把常数和表达式作为实参传送给形参时, 应注意类型匹配。,字符串常数和

15、数值常数分别传送给字符串类型的形参和数值类型的形参。,当传送数值常数时,如果实参表中的某个数值常数的类型与Function或Sub过程形参表中相应的形参类型不一致,则这个常数被强制变为相应的类型。,当作为实参的数值表达式与形参类型不一致时,通常也强制变为相应的形参的类型。,(2)记录是用户定义的类型,传送记录实际上是 传送记录的变量。,调用过程,并把定义的记录变量传送到过程。,定义记录类型变量。,定义记录类型。,Type StockItem PartNumber As String * 8 Description As String * 20 UnitPrice As Single Quant

16、ity As Integer End Type,Dim StockRecord As StockItem,Call FindRecord(StockRecord),在定义过程时,要注意形参类型匹配。,Sub FindRecord(RecordVar As StockItem),(3)单个记录元素的传送。 传送单个记录元素时,必须把记录元素放在 实参表中,写成“记录名.元素名” 的形式。,第四节可选参数与可变参数,一、可选参数,IsMissing函数有一个参数,它就是由Option 指定的形参的名字,其返回值为Boolean类型。,在VisualBasic 6.0中,可以指定一个或多个 参数作为

17、可选参数。,可选参数过程通过Option指定可选的参数, 其类型必须是Variant,通过IsMissing函数 测试是否向可选参数传递实参值。,Sub Multi(fir As Integer, sec As Integer, Optional third) n = fir * sec If Not IsMissing(third) Then n = n * third End If Print n End Sub,Private Sub Form_Click() Multi 10, 20 End Sub,Private Sub Form_Click() Multi 10, 20, 30 E

18、nd Sub,结果:200,结果:6000,二、可变参数,参数可变的过程称为可变参数过程,可以 向这样的过程传递一个或多个参数。,格式:Sub过程名(ParamArray数组名),注: “数组名”是一个形式参数,只有名字和括 号,没有上下界。由于省略了变量类型,“数 组”的类型默认为Variant。,Sub Multi(ParamArray Numbers() n = 1 For Each x In Numbers n = n * x Next x Print n End Sub Private Sub Form_Click() Multi 2, 3, 4, 5, 6 End Sub,结果:7

19、20,Private Sub Form_Click() Dim a As Integer, b As Long, c As Variant, d As Integer a = 6: b = 8 c = 12: d = 2 Multi a, b, c, d End Sub,由于可变参数过程中的参数Variant类型, 因此可以把任何类型的参数传送给该过程。如:,第五节对象参数,一、窗体参数,Visual Basic中,可以向过程传递对象, 包括窗体和控件。,格式:Sub过程名(形参表) 语句块 Exit Sub End Sub,“形参表”中形参的类型通常为Control或Form。,注: 在调用

20、含有对象的过程时,对象只能通过传 地址方式传递。因此在定义过程时,不能在其参 数前加关键字ByVal。,如:有4个窗体要求大小和位置都相同。 Left、Top、Width、Height,窗体作为参数,编写通用过程,Sub FormSet(FormNum As Form) FormNum.Left = 2000 FormNum.Top = 3000 FormNum.Width = 5000 FormNum.Height = 3000 End Sub,如:,二、控件参数,和窗体参数一样,控件也可以作为通用过 程的参数。即在一个通用过程中设置相同性质 控件所需要的属性,然后用不同的控件作为实 参调用

21、此过程。,例9.10 编写一个通用过程,在过程中设置字体 属性,并调用该过程显示指定的信息。,该例过程中有两个参数,其类型均为Control。,在用控件作为参数时,必须考虑到作为实参的 控件是否具有通用过程中所列的控件的属性。,控件参数的使用比窗体参数要复杂一些,因为 不同的控件所具有的属性也不一样。,在用指定的控件调用通用过程时,如果通用过 程中的属性不属于这种控件,则会发生错误。,格式:If|ElseIfTypeOf控件名称Is控件类型,注: “控件名称”实际上指的是控件参数(形参) 的名字,即“AsControl”前面的参数名。“控件 类型”是代表各种不同控件的关键字。,CheckBox

22、(复选框) Frame(框架) ComboBox(组合框) HScrollBar(水平滚动条) CommandButton(命令按钮) Label(标签) ListBox(列表框) DirListBox(目录列表框) DriveListBox(驱动器列表框) Menu(菜单) FileListBox(文件列表框) OptionButton(单选按钮) PictureBox(图片框) TextBox(文本框) Timer(计时器) VScrollBar(垂直滚动条),关键字:,TypeOf测试,例9.11 在窗体上建立两个命令按钮,单击某个命令按钮后,该按钮移动到窗体上的某个随机位置。,第六节局部内存分配,局部变量的内存在需要时分配,释放后可 以被其他过程的变量使用。,在过程结束时不失去保存在局部变量中的 值,可以使用Static语句,其格式如下:Static变量表 变量表的格式: 变量()As类型,变量()As类型,说明: Static语句只能出现在事件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论