
VB课件VB7章节.ppt
80页第 7 章 过程,2,教学要求,掌握VB的两种过程:事件过程和通用过程 掌握Sub过程的定义 掌握Function过程的定义 掌握过程的调用 掌握参数的传递——按值传递和按地址传递 掌握递归算法 掌握变量的作用域,3,7.1 Sub过程 7.2 Function过程 7.3 过程调用 7.4 参数的传递 7.5 递归过程 7.6 变量的作用域 7.7 程序示例 7.8 创建与设置启动过程,教学内容,4,基本思想:将一个大的程序按功能分割成一些小模块 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 避免程序开发的重复劳动 易于维护和功能扩充,模块化程序设计,5,,,,Private Sub Command1_Click() n = Val(Text1.Text) m = Val(Text2.Text) k = n t = 1 For i = 1 To k t = t * i Next i s = t k = m t = 1 For i = 1 To k t = t * i Next i s = s / t k = n - m t = 1 For i = 1 To k t = t * i Next i s = s / t Text3.Text = Str(s) End Sub,能不能简化?,计算:,模块化程序设计举例,6,Private Sub Command1_Click() Dim m As Integer, n As Integer Dim s As Long n = Val(Text1.Text) m = Val(Text2.Text) s = fact(n) / (fact(m) * fact(n - m)) Text3.Text = Str(s) End Sub Private Function fact(k As Integer) As Long Dim i As Integer fact = 1 For i = 1 To k fact = fact * i Next i End Function,使用函数,7,过程的分类,8,7.1 Sub过程--事件过程,1. 概念:由控件对象通过事件触发所执行的一系列代码。
2. 说明: 事件过程之前一般都有Private Sub,表明事件过程是局部的,只在本窗体中有效 事件过程是否有参数由系统自动添加,不能人为改动 3. 分类: 窗体事件过程 控件事件过程,Private Sub Form_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub,Private Sub 控件名_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub,窗体的事件过程名中不使用其具体名称,而固定用Form,控件的事件过程名中必须使用其具体名称,9,7.1 Sub过程--事件过程,4. 窗体启动时的4个相关事件 (p.126) Initialize(初始化)事件——配置窗体,在Load之前 Load(加载)事件——窗体加载到内存时触发 Activate(激活)事件——成为被激活窗体时触发 GotFocus(聚焦)事件——窗体成为当前焦点时触发,一般是窗体上的控件成为焦点,而不是窗体执行次序: Initialize Load Activate Gotfocus,,,,注意: 窗体的Initialize、Load事件发生在窗体被显示之前,其中可放置系统初始化命令,但其中语句有所限制; 窗体加载后,只要不被卸载,就不会再执行Initialize、Load事件,但Activate事件会多次发生; 当访问另一窗体上的“非可视”数据或调用其中定义的全局过程时,只会触发该窗体的Initialize事件,而Load事件不触发; 当访问另一窗体上的“可视”数据时,会同时触发该窗体的Initialize和Load事件,10,在以下两种情况下,经常使用自定义过程: (1)应用程序中出现较频繁的处理,仅仅是每次处理的数据不同而已; (2)程序中比较复杂的算法,独立出来,增强程序的可读性。
通用过程的引入使得整个程序的结构更加清晰,模块化更强7.1 Sub过程—通用过程,概念:完成某一特定功能的程序段 说明: 必须显式调用方可执行 3. 分类: 公有过程 (Public) 私有过程(Private),11,4. 通用Sub过程的定义,[格式]: [Private|Public] [static] Sub ([]) End Sub,[说明]: (1) 以Sub开头,End Sub结束,中间是过程体——包括变量声明和语句块; (2) 以Private为前缀的过程是模块级的,以Public为前缀的过程是应用程序级的,缺省默认是Public; (3) Static 选项说明过程中的局部变量是静态变量; (4) 过程名的命名规则和变量名相同,在同一个模块中,过程名必须是唯一的; (5) 参数列表中的参数称为形式参数,可以没有,但无参数时圆括号不能省略;有多个参数时,参数之间用逗号间隔;,12,(6)参数说明格式: [Optional][ByVal|ByRef] [()][As ] 其中: a) 若参数是数组,则在变量名后面加一对圆括号,但无维界定义; b) ByVal:指明参数传递方式是传值; c) ByRef:指明参数传递方式是传地址,为缺省值; d) 若参数是字符型的,必须是不定长字符串; e) Optional:参数是可选的,必须定义在必选参数后面。
(7) 当过程调用结束,即执行到End Sub语句,系统自动返回调用程序的调用语句处,执行调用语句的下一条语句; (8)在过程体中不能再定义过程,但可以调用其他过程; (9)可用Exit Sub语句提前退出过程调用,返回调用语句例: Private Sub Exchange(x As Integer,y As Integer) Dim Temp As Integer Temp=x : x=y : y=Temp End Sub,该通用过程实现交换功能,包含两个参数,均是ByRef形式的参数13,下一条语句,Sub,主调程序,被调过程,主调程序,被调过程,14,5. 建立通用Sub过程 方法一:在“代码编辑窗口”的“通用”中自行输入; 方法二:进入代码编辑器窗口,执行“工具”菜单的“添加过程”,在“添加过程”对话框中输入定义过程的名称、类型和范围后单击“确定”按钮,系统会自动在代码窗口添加自定义过程的框架(过程头和过程结束语句)15,6. Sub过程调用 [格式一]:Call [()] [格式二]: [] [功能]:对已定义的过程进行调用 [说明]: (1)调用的过程必须是已经定义的,否则系统会出现“子程序或函数未定义”的信息提示; (2)实在参数可以是常量、变量或表达式、数组; (3)实在参数的数目及类型要和定义时必选参数保持一致,否则系统会出现“参数不可选”的信息提示,参数之间用逗号间隔; (4)若子程序没有参数,则格式一中的括号可以省略; (5)格式一和格式二的区别在于:格式二的参数表无须括号,而是和过程名之间用空格隔开;,16,举例1:将键盘输入的三个数按从小到大的顺序排列输出。
[程序一]:,Private Sub Command1_Click() Dim a As Integer, b As Integer, c As Integer Dim t As Integer a = Text1.Text: b = Text2.Text: c = Text3.Text If a b Then t = a a = b b = t End If If a c Then t = a a = c c = t End If If b c Then t = b b = c c = t End If Text1.Text = a: Text2.Text = b: Text3.Text = c End Sub,17,[程序二]:定义子程序Change实现交换功能,该子程序定义了两个为ByRef方式的必选参数,来传递交换功能实现前的原始数据和返回交换功能实现后的结果数据,至于交换过程中需要的临时变量Temp则因没有保留的价值无须定义为参数,仅在子程序体中定义子程序即Sub过程的使用不仅可以缩短程序的长度,还能够使程序的结构更加清楚Private Sub Command1_Click() Dim a As Integer, b As Integer Dim c As Integer a = Text1: b = Text2: c = Text3 If a b Then Call Change(a, b) If a c Then Call Change(a, c) If b c Then Call Change(b, c) Text1 = a: Text2= b: Text3= c End Sub Private Sub Change(x1 As Integer, x2 As Integer) Dim Temp As Integer Temp = x1 x1 = x2 x2 = Temp End Sub,Call Change(a,b)语句也可以用Change a, b来替代。
18,Private Sub value(a() As Integer, min As Integer) Dim i As Integer min = a(1) For i = 2 To UBound(a) If a(i) min Then min = a(i) Next i End Sub,举例2:定义一个通用过程用以求一维数组中的最小值,19,7 . 2 Function 过程 Function过程的特点是返回一个值,因此我们通常也称之为自定义函数 1. Function过程的定义 [格式]: [Private|Public] Function ([参数列表]) [As ] End Function,[说明]: (1) 以Function开头,以End Function结束,中间是函数体; (2) 函数名命名规则、参数列表的表示都和Sub过程相同; (3) As 数据类型:函数过程将由函数名返回一个值,值的类型由[As 数据类型]定义; ★ (4) 函数体中一定要有对函数名赋值的语句——函数名=表达式,否则返回相应类型的初值; ★ (5) 函数体内可有Exit Function语句——无条件退出函数过程,返回主程序。
(6) Function过程不能嵌套定义,但可嵌套调用20,Private Function f(Byval x As Integer) As Integer f = 3*x^3-2*x^2+6*x-1 End Function,举例1:定义函数:,函数名=表达式,举例2:编写一个求n!的函数p131),Private Function Fact(Byval n As Integer) As Long Dim K As Integer Fact=1 If n=0 Or n=1 Then Exit Function Else For K=1 To N Fact=Fact*K Next K End If End Function,函数名=表达式,传值的参数,21,2. 调用 Function 过程 [格式]:([实在参数表]) [功能]:返回一个函数值 [说明]: (1)一般情况下,函数的调用出现在赋值语句中,并且在赋值号的右侧; (2)若函数没有参数,函数名后的括号不能省略; (3)虽然VB允许象调用Sub过程那样调用Function过程,但这样调用时系统不返回函数值,建议大家不要使用这种调用方法。
Call fact(x) Fact x 这两种方法均放弃函数的返回值,例如:,22,Private Sub Form_Click() D。
