1 / 22

第 9 章 过程

第 9 章 过程. SUB 过程 FUNCTION 过程 参数传递 可选参数与可变参数 对象参数 局部内存分配 递归 SHELL 函数 典型应用. 第 8 章 过程. 过程的作用: 1 、任务划分; 2 、代码重用 系统过程与自定义过程 系统过程 --- 内部函数、事件过程 自定义过程 ---SUB 过程,函数过程等 自定义通用过程: 多个不同的事件过程可能需要使用一段相同的代码, 可以把这一段代码独立出来,作为一个通用过程。 通用过程分成两类: 子程序过程 , 函数过程 子程序过程由 SUB … ..END SUB 定义

eros
Download Presentation

第 9 章 过程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第9章 过程 • SUB过程 • FUNCTION过程 • 参数传递 • 可选参数与可变参数 • 对象参数 • 局部内存分配 • 递归 • SHELL函数 • 典型应用

  2. 第8章 过程 过程的作用:1、任务划分;2、代码重用 系统过程与自定义过程 系统过程---内部函数、事件过程 自定义过程---SUB过程,函数过程等 自定义通用过程: 多个不同的事件过程可能需要使用一段相同的代码, 可以把这一段代码独立出来,作为一个通用过程。 通用过程分成两类:子程序过程,函数过程 子程序过程由 SUB …..END SUB 定义 函数过程由FUNCTION ….END FUNCTION定义

  3. 应用程序 工程文件( .vbp) 类模块 (.cls)文件 标准模块 (.bas)文件 窗体模块 (.frm)文件 事件过程 子过程 函数过程 函数过程 子过程

  4. SUB 过程 • SUB 过程的建立 1、定义 [static][private][public]sub 过程名[(参数表列)] 语句块 [exit sub] [语句块] End sub 过程名前缀是过程的性质,过程不能嵌套 参数表列是形参,格式是: [byval]变量名[()][as 数据类型]

  5. SUB 过程 自定义过程与事件过程的区别: 1、从结构形式上看,事件过程名是由控件(对象)名 和事件名连接而成,而自定义过程的名称是由用户起 的一个任意的合法标识符; 2、从启动的机制上看,事件过程是由事件触发,而自 定义过程是由另外的过程来调用运行。 如何建立SUB过程? 方法1选模块---工具菜单中的添加过程 方法2工程菜单中的添加模块---模块代码窗口键入过 程的名字。

  6. SUB 过程 子过程调用 1、用CALL 语句调用SUB过程 格式:call 过程名[(实际参数)] 如 call try(”*”,8) 2、直接用过程名调用 如 call try “*”,8 举例

  7. 函数过程 • 函数过程的定义 [过程类型]function 过程名[(参数表列)][as 类型] [语句块] [过程名=表达式] [exit function] [语句块] End function 注意:函数过程必须返回一个值(表达式的值,如果 没有过程名=表达式则返回默认的值0或空字符串) As类型是值返回值的类型

  8. 函数过程 建立函数过程 同建立子过程一样 函数过程的调用 同内部函数调用格式一样 举例

  9. 参数传递 • 形参和实参 在过程定义的参数表出现的参数叫形参。 在调用过程语句或表达式中出现的参数叫实参。 形参与实参在个数和位置上一一对应,进行数据传递 传递方式有两种:值传递(也叫传值调用) 地址传递(传址调用或引用调用) 采用传值调用,形参前要用关键字BYVAL界定 采用传址调用,形参前用关键字BYREF或省略界定 特别:采用传值调用时,实参只把值传给形参,调用 过程结束后,实参的值保持不变;采用传址调用时, 参将地址传给形参,调用过程结束后,实参的值跟随形参的值而变化。

  10. 举例 1、传值调用 Private Sub nochange(ByVal a%, ByVal b%) a = a + b b = a * b Print "a="; a; "b="; b End Sub 结果: Private Sub Command6_Click() Dim x%, y% x = 5: y = 10 Print "x="; x; "y="; y nochange x, y Print "x="; x; "y="; y End Sub X=5 y=10 A=15 b=150 X=5 y=10

  11. 举例 2、传址调用 Private Sub Command7_Click() Dim x%, y% x = 5: y = 10 Print "x="; x; "y="; y samechange x, y Print "x="; x; "y="; y End Sub 结果: Private Sub samechange(a%, b%) a = a + b b = a * b Print "a="; a; "b="; b End Sub X=5 y=10 A=15 b=150 X=15 y=150

  12. 数组参数的传递 Sub ss(a(),b()) … End sub Call ss(y(),x()) 传递的一般形式举例 采用址传递方式: 注意: 1、如传递整个数组,形参和实参表中用数组名,略去 上下界,但括号要有。 2、如果只传递单个数组元素,要指明元素的下标; 3、如果不知数组的上下界 用LBOUND和 UBOUND函数 Sub pain (a()) For I=lbound(a,1)to ubound(a,1) For j=lbound(a,2) to ubound(a,2) Print a(I,j) Next j ….

  13. 可选参数与可变参数 一般形参和实参的个数是相同的,但是可以将某个形 参前冠以OPTIONAL关键字,变成可选参数,这样, 实参可以有选择地调用形参。 sub mu(f1 as integer,f2 as integer,optional f3) N=f1*f2 If not ismissing(f3) then N=n*f3 Endif Print n End sub Private sub form-click() Mu 10,20 End Private sub form-click() Mu 10,20,30 End sub

  14. 可选参数与可变参数 假如传递的一维数组元素个数不定,可以采用可变参 数传递方式,形参只写数组名和括号,用下面格式: SUB 过程名(paremarray 数组名) 举例: Sub mu (paramarray as()) N=1 For each x in as N=n*x Next x Next n End sub Private sub form_click() Dim a%,b&,c%,d as variant A=6:b=8:c=12:d=23 Mu a,b,c,d End sub

  15. 过程与变量的作用域 • 过程的作用域 1、模块级 在某文件(模块)内定义的过程,如果在SUB或 FUNCTION前加 Private,则该过程只能被本文件中定 义的过程调用。即作用域为本文件(模块) 2、全局级 过程定义时,如果在SUB或FUNCTION前加 public,则 该过程可以应用程序中所有文件(模块)定义的过程 调用。即作用域为整个应用程序(工程)

  16. 过程与变量的作用域 3、静态过程 过程定义时,如果在SUB或FUNCTION前加static,则 该过程 的所有变量均为静态变量。

  17. 过程与变量的作用域 • 变量作用域 1、过程级(局部级)变量 在过程内部用DIM或STATIC声明的变量,作用域为本过程。 用dim声明的叫普通变量,只有过程调用时才分配单元,过程结 束后,存储单元被系统收回。 用static声明的叫静态变量,一次性分配,过程结束后, 变量的值仍然保存。 2、文件级(模块级)变量 在(通用)、(声明)段,用dim或private语句声明的变量,作 用域为本文件(模块),一次性分配内存单元

  18. 过程与变量的作用域 3、工程级(项目级、全局)变量 在任一文件中,各过程之外,用public语句定义的变 量,作用域为整个工程或整个项目

  19. 窗体参数与控件参数 VB可用对象(窗体和控件)作为过程的参数,其类型 是control,(或form) 创建的对象作为实际参数,以地址调用方式 传递给过程,在过程种可以修改对象的属性,使用对 象的方法。 Private Sub fontout(t1 As Control, t2 As Control) t1.FontSize = 24 t1.Font = "宋体" t2.FontSize = 36 t2.Font = "隶书" t2.FontItalic = True End Sub Private Sub Form_Load() Text1.Text = "欢迎使用" Text2.Text = "Visual Basic 6.0" End Sub Private Sub Form_Click() fontout Text1, Text2 End Sub

  20. 递归调用 VB允许在一个过程中有调用自身的语句,称为递归调 用;也允许调用另一过程,而该过程又反过来调用本 过程,称为间接递归调用。 如求N阶乘的VB函数过程 Private funcion f(byval n as integer) as integer If n=1 then F=1 Else F=n*f(n-1) Endif End function 递归 求解有两个条件 ①给出递归终止的条件和递归终止的状态 ②给出递归的表述形式,并且这种表述要向终止条件变化,能够在有限步内达到终止条件

  21. 递归调用 如求4!,递归调用情况如下: ①f(4)=4*f(3) N=4,调用f(3) ②f(3)=3*f(2) n=3,调用f(2) ③ f(2)=2*f(1) n=1,调用f(1) ④f(1)=1 =4*6=27⑦ 求得f(4) =3*2=6⑥ 求得f(3) =2*1=2⑤ 求得f(2)

  22. 调用外部应用程序 凡是能在DOS或WINDOWS下运行的应用程序,都可 以在VB中通过SHELL函数调用,格式如下: SHELL(命令字符串[,窗口类型]) 其中:命令字符串是应用程序名,窗口类型是指窗口 的大小,见表8.3,有6种大小 举例: 调用WORD Shell(“c:\winword\winword.exe”,1) 调用计算器 Shell(“calc.exe”,1)

More Related