资源预览内容
第1页 / 共63页
第2页 / 共63页
第3页 / 共63页
第4页 / 共63页
第5页 / 共63页
第6页 / 共63页
第7页 / 共63页
第8页 / 共63页
第9页 / 共63页
第10页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第9章 过程与模块,9.1 过程,9.2 参数传递,9.3 作用域,9.4 嵌套与递归调用,9.1 过程,在开发在一个复杂的应用程序过程中,应按照结构化、模块化程序设计的原则,将任务进行细分,划分为若干个相对独立的小任务,使之构成功能单一的模块。,在Visual Basic中,就是通过自定义过程与函数,实现结构化、模块化程序设计思想。,过程的重要作用在于实现对复杂任务“分而治之”。它的优点是: 它可以将一个复杂任务分解为若干简单的、易于理解和实现的小任务,并分别运用过程来对其进行描述,这样有利于程序的实现,容易维护。 可以实现代码重用,提高编程效率。,9.1.1 自定义过程,自定义过程:是实现某个特定功能按照一定格式书写的一组程序代码,这组程序代码有其自身的标识符,可以通过这个名字在其它地方使用它,或被其他过程所调用。,自定义过程与事件过程区别: 过程名上的区别。事件过程名是由对象名和事件名连接而成,而自定义过程的名字是任意一个合法的标识符。 启动机制的不同。虽然事件过程也可以被其他过程所调用,但通常都是在某个对象的特定事件发生时自动启动的。而自定义过程只能被另一个过程调用时才启动。,自定义过程定义的格式如下: Private | Public Static Sub 语句序列 Exit Sub 语句序列 End Sub,说明: 过程的定义应以Sub开头,以End Sub结束。其间可以包含由0个或多个Exit Sub分隔开的语句序列,当子过程执行到End Sub或Exit Sub语句时,系统结束执行Sub过程中代码,退出过程调用。系统将接着从调用该Sub过程的语句下一条语句执行。在Sub过程的任何位置都可以有Exit Sub语句(Exit Sub通常是与If语句配合使用)。, 所有的可执行代码都必须、也只能属于某个过程。不能在Sub或Function过程中定义其它Sub过程。, 过程名的命名规则与变量名相同。过程名不允许与Visual Basic的保留字相同,不能与其它的自定义过程、函数以及同一级的变量有相同的名字。 关键字Public为可选项。表示所有模块与所有其它过程都可访问这个Sub过程。如果在包含Option Private的模块中使用,则这个过程在该工程之外是不可使用的。 关键字Private为可选项。表示只有过程所在模块的其它过程可以使用该Sub过程。, 关键字Static为可选项。表示在调用之间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。 所有程序都遵循I-P-O周期,过程是一种特殊的程序。我们定义过程、函数的过程其实就是我们处理假定数据的过程。其假定的数据称为形式参数,属于临时变量,仅在本子过程内有意义,多个假定数据(形式参数)之间用逗号分隔。,Visual Basic也允许定义形式参数的过程。形式参数的一般格式为: ByVal | ByRef ( ) As 其中: ByVal、ByRef为可选项,表示过程调用时,实际要处理的数据传递给过程处理时的传递特征,ByRef是Visual Basic的缺省选项。 ( )对数组变量是必需的。用来指明变量名是一个数组。,如果在程序的某个位置需要用到过程的功能,我们就可调用此过程来完成相应的功能,其调用的语法格式有: Call () ,建立自定义过程的方法:,打开代码设计窗体, 选择工具菜单添加过程后,弹出添加过程对话框(如下左图); 在(名称)文本框中输入过程名,选择相应类型与范围后,单击确定按钮后,进入代码设计窗体(如下右图) 。,过程调用的语法格式说明: 使用格式时,实际参数不能用圆括号括起来,且过程调用语句中实际参数表中的参数数目、类型以及排列顺序必须与过程定义语句中的形式参数表保持一致。,例题1:自定义无形式参数过程的调用与事件过程的调用计算1+2+3+100,界面如下图所示。,程序代码设计:,Private Sub Command1_Click() Call sum 调用自定义无形式参数过程 End Sub Public Sub sum() 自定义无形式参数过程 Dim i As Integer, sum As Integer sum = 0 For i = 1 To 100 sum = sum + i Next i Label2.Caption = sum End Sub,Private Sub Command2_Click() 单击事件过程 Dim i As Integer, sum As Integer sum = 0 For i = 1 To 100 sum = sum + i Next i Label2.Caption = sum End Sub Private Sub Command3_Click() Call Command2_Click 调用单击事件过程 End Sub Private Sub Command4_Click() Label2.Caption = “ 清除运算结果 End Sub,例题2:使用模块化思想设计一个有参数过程,实现在窗体上输出倒一个三角形形状的图形的程序。用户界面如图所示。,Private Sub PrintImage(ByVal n As Integer, ByVal s As String) 过程中包含n和 s两个参数,其中n是要显示的行数, s是字符 Dim i%, j% For i = 1 To n Print Space(i - 1); 每行前部分的空格 Print String(2 * (n - i) + 1, s) 每行后部分的符号 Next i End Sub Private Sub CmdCls_Click() Cls 清屏命令 End Sub,程序代码设计:,Private Sub CmdEnd_Click() End 终止程序的运行 End Sub Private Sub CmdOutput_Click() Dim str As String * 1, n As Integer str = Trim(TxtChar.Text) 实际要显示的字符 n = Val(TxtNum.Text) 实际要显示的行数 Call PrintImage(n, str) 输出一个特定的图形 End Sub,说明: 由于空格属于字符的范围,若在输入显示字符时无意在字符前加入了空格字符,执行结果将不会显示所要的图形,因此,在str = Trim(TxtChar.Text)语句中使用Trim()函数,把前置、后随空格过滤掉,防止可能产生的显示错误。,消去文本框中字符的前后空格, 过程设计时,使用形式参数,过程调用时需要将实际要处理的数据,以参数形式传递给过程,传递的过程如图所示。,9.1.2 自定义函数的定义与调用,自定义函数书写格式、使用方法等与自定义过程非常类似,都是能实现某种特定功能的一组程序代码。,自定义函数定义的语法格式为: Private|PublicStaticFunction _ As = Exit Function = End Function,说明: 与自定义过程一样,函数也是一个独立的程序模块,可读取参数、执行一系列语句并改变其参数的值。但与过程不同的是,Function过程可返回一个值到调用它的程序。 一个函数有且只有一个处理结果,这就是函数值,它与变量完全一样,有数据类型,能作为表达式来使用。在函数定义时用As子句设置;如果没有As子句,缺省的数据类型为通用类型。 在定义中,给函数名自身赋值的语句,即是指定函数返回值的过程。 不能在函数中嵌套定义其它函数或过程,但可以使用其它已经设计好函数与过程。, Exit Function语句使系统立即结束Function函数的执行,接着从调用该Function函数的语句之后的语句继续执行。函数体中可以有零个或多个Exit Function语句(通常与If语句配合使用)。 一个函数设计好以后,在有效范围之内,与系统提供函数如Sqr()、Cos()等的使用、作用完成相同。 函数定义过程中如果没有对函数名赋值,即没有指定函数的返回值,则函数将返回一个缺省值:数值函数返回0,字符串函数返回一个零长度字符串(“),可变类型函数则返回Empty。,如果程序中需要用到函数来完成任务,可以把函数作为 一个表达式来使用,调用此函数,其使用的语法格式为: 函数过程名(实际参数表) 说明: 实际参数表中的参数数目、类型以及排列顺序必须与函数定义语句中的形式参数表保持一致。函数不能作为单独的语句使用,函数过程必须作为表达式中的一部分,与其他的语法成分配合构成语句。,函数调用的方法:,例题3:设计一个计算圆柱体体积的函数,计算圆柱体体积。界面如图所示。,程序代码设计:,Private Function Cal(ByVal r!, ByVal h!) As Double Cal = 3.1416 * r * r * h 体积计算函数 End Function Private Sub CmdCal_Click() Dim x!, y! x = Val(TxtR.Text) y = Val(TxtH.Text) TxtV.Text = Cal(x, y) 调用自定义函数 End Sub Private Sub CmdClsData_Click() 清除数据 TxtR.Text = “: TxtH.Text = “ TxtV.Text = “ End Sub,例题4:设计一个计算1+2+3+k的函数,并利用它计算数列1+(1+2)+(1+2+3)+(1+2+3+n)前指定项的和。界面如图所示。,程序代码设计:,计算“(1+2+3+.+k)” 函数SM的代码为: Private Function SM(ByVal k%) As Long 计算表达式(1+2+3+.+k)的值 Dim s&, i% s = 0 For i = 1 To k s = s + i Next i SM = s End Function,Private Sub CmdCal_Click() Dim t&, n%, i% t = 0 n = Val(TxtN.Text) For i = 1 To n t = t + SM(i) 调用自定义函数 Next i TxtT.Text = t End Sub Private Sub CmdEnd_Click() End End Sub,9.1.3 几个系统函数,、Shell()函数 :,功能:执行一个可执行文件,返回一个Double数据。如果成功启动可执行文件,则返回值为这个程序的任务ID;若不成功,则会返回0。 使用的语法格式为: Shell(命令字符串,窗口类型), 命令字符串,为必选参数,指出要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。,说明:,在缺省情况下,Shell()函数是以异步方式来执行其它程序的。也就是说,用Shell()启动的程序可能还没有完成执行过程,就已经执行到Shell()函数之后的语句。,窗口类型,为可选参数。表示相应可执行程序启动后窗口的样式。如果窗口类型省略,则程序是以具
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号