过程的建立和使用

上传人:ji****72 文档编号:51028634 上传时间:2018-08-12 格式:PPT 页数:26 大小:508KB
返回 下载 相关 举报
过程的建立和使用_第1页
第1页 / 共26页
过程的建立和使用_第2页
第2页 / 共26页
过程的建立和使用_第3页
第3页 / 共26页
过程的建立和使用_第4页
第4页 / 共26页
过程的建立和使用_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《过程的建立和使用》由会员分享,可在线阅读,更多相关《过程的建立和使用(26页珍藏版)》请在金锄头文库上搜索。

1、第4章 过程的建立和使用过程是用于完成特定任务的一组指令代码。使用过程编写程序, 可以提高编程效率、优化程序结构。VB程序设计,就是编写一个 个过程,实现复杂的功能。VB中的过程包括事件过程、子过程和 函数过程。在过程的调用中,涉及参数的传递、变量的作用范围 等问题。本章包括以下知识点。 概述过程的功能和特点。 事件过程响应代码的编写方法。 子过程的创建、调用和退出技术。 函数过程的创建、调用方法。 过程调用时,涉及形参和实参两种参数类型。参数传递方式有按 值传递和按地址传递两种。按地址传递参数,实参有可能在程序 运行的时候会被修改。 过程的嵌套与递归调用技术。 变量的使用受其作用域与生存周期

2、限制。 如果将控件比作VB的骨架,那么过程就是VB的肌肉。通过本章的 学习,读者可以掌握VB程序设计的实质性内容,可以快速提高编 程能力。4.1 过程概述 过程是为了完成特定任务而编写的功能相对独立 的代码段。每个过程都有自己的过程名,其他程 序可以通过过程名调用该过程。 对于读者来说,VB中的过程其实并不陌生,从第1 章开始,读者就已经接触到了过程,只是笔者并 未提及这一概念。事件驱动是VB程序设计的一大 特色,而事件就是一个过程。下面的代码就是一 个常用的窗体加载过程。 Private Sub Form_Load() End Sub4.2 事件过程事件是VB控件的三大要素之一,事件驱动是V

3、B的特点。当 对象接收到外部操作(如单击鼠标、按下键盘等),就触 发相应的事件,并调用该事件过程。 一个完整的事件过程包括过程名和过程响应代码。过程名 由窗体或控件的名称、下划线和事件名组成。窗体或控件 的事件过程名由自动VB创建,事件过程的响应代码由程序 员编写。例如,在下面的窗体事件过程中,从立即窗口中 输出“Visual Basic 6.0”。 Private Sub Form_Load() Dim strSample As StringstrSample = “Visual Basic 6.0” Debug.Print strSample End Sub4.3 通用过程 通用过程是为了

4、完成一些特定功能而编写的代码 块。通用过程不是由事件触发的,而是由其他过 程调用的。例如,多个事件过程需要执行相同的 任务,那么可以将该任务做成通用过程,供这些 事件过程调用,避免重复书写代码。通用过程有 子过程和函数过程两种类型。4.3.1 子过程在VB程序设计中,要使用子过程完成特定的功能,需要完成创建子过程、 调用子过程和退出子过程三个操作。 1创建子过程:子过程使用关键字Sub和过程名创建,按回车键系统会自 动添加End Sub语句。程序员在Sub与End Sub之间编写过程代码。子过程 的语法格式如下。 Sub subname (argumentlist) Instructions

5、End Sub 2调用子过程:子过程的调用可以使用Call语句调用,也可以直接使用过 程名调用。其语法格式如下。 使用Call语句调用子过程 Call subname (argumentlist) 直接使用过程名调用子过程 subname argumentlist 3退出子过程:在子过程中,可以通过Exit Sub语句改变程序的控制流程 ,从该过程中立即退出。Exit Sub与前一章中的Exit For和Exit Do用法 是一样的,都是用于强制改变程序控制流的。只是Exit Sub强制跳出子过 程,返回并执行调用语句后面的程序。而Exit For和Exit Do跳出当前循 环,执行当前过程中

6、该循环后面程序。4.3.2 函数过程如果想在表达式中使用过程,或者希望获得过程的返回值 ,那么可以使用函数过程。函数过程的创建与使用与子过 程基本上是一样的。 1创建函数过程 函数过程使用关键字Function和函数名创建。其语法格式 如下。 Function functionname (argumentlist) As type Instructions functionname = expression End Sub 2调用函数过程 函数过程的调用与子过程的调用稍有差异。调用函数过程 既可以返回函数值,也可以像调用子过程一样,不必返回 函数值。4.4 参数传递 在上面的子过程调用和函数过

7、程的调用中,都存 在着被调过程与调用过程之间的参数传递。参数 形式有形参与实参两种,参数传递方式有按地址 传递和按值传递两种。4.4.1 形参与实参 形参是形式参数的缩写,是声明过程中使用的参 数,用于接收数据。程序员可以定义形参的数据 类型。形参变量的有效范围局限于该过程内部。 当过程调用结束,形参变量就被释放。实参是实 际参数的缩写,是调用过程时使用的参数。实参 是传递给过程的参数。实参的类型较多,可以是 常量、变量或表达式等。实参与形参的变量名称 可以相同,也可以不同。 在窗体加载事件Form_Load中,c=cir(r)中的变量 r是实参;s=area(5)中的常量5也是实参。在函数

8、过程Function cir(r As Single) As Single和 Function area(r As Single) As Single中,变 量r是形参。4.4.2 按值传递和按地址传递在调用过程的时候,通常存在两种参数传递方式,即按值 传递参数和按地址传递参数。 1按值传递参数 按值传递参数,就是将变量的拷贝值传递给被调用的过程 ,而该变量本身不会发生变化。在过程调用中,实参为常 量、表达式或者在定义过程时使用ByVal关键字时,参数的 传递方式就是按值传递。 2按地址传递参数 按地址传递参数,实际上就是把变量的内存地传递给过程 的形参。此时,形参与实参共用同一个内存单元,当

9、形参 的值发生变化时,实参的值也随之发生变化。在过程调用 中,实参为变量或者定义过程中使用ByRef关键字时,参数 的传递方式就是按地址传递。 3参数传递示例4.5 过程的嵌套与递归调用 VB允许过程的嵌套调用和过程的递归调用。过程 的嵌套调用,是指在一个过程的定义中调用另一 个过程。过程的递归调用,是指在一个过程内部 直接或者间接地调用该过程自身。4.5.1 过程的嵌套调用 过程嵌套可以简化程序结构,提高编程效率。在 VB中,各过程之间是平行的,不存在上一级过程 和下一级过程的问题。因此,VB不允许在一个过 程的定义中,再定义另一个过程。但是,在VB程 序设计中,可以使用过程的嵌套调用。 函

10、数cnm()中三次调用函数s(),避免三次输入相同 的代码,使得程序的结构比较简洁清晰。4.5.2 过程的递归调用过程的嵌套调用,是在一个过程中调用另一个过程。而过程的递 归调用,是过程调用过程自身。递归调用同样可以简化程序代码 ,提高编程效率,并使得程序结构较为清晰。 使用过程递归调用方法,求 ,并从立即 窗口输出计算结果。示例代码如下所示。4.6 变量的作用域与生存周期 变量的作用域是指变量在一个工程中的有效使用 范围。变量只在其作用域中有效。变量的生存周 期是指变量的值在程序中被保存的时间。按照变 量的作用域不同,可以将变量分为局部变量、模 块变量和全局变量三种类型。4.6.1 局部变量

11、局部变量是在过程内部声明和使用的变量。因此,局部变量也称 为过程级变量。局部变量只能被其所属过程的内部代码访问和修 改,其他过程不能获得该变量的值,更不能修改该变量。当局部 变量所属的过程运行结束后,该变量就会消失。 局部变量使用关键字Dim声明,这在前面的示例中用到过很多次。 另外,关键字Static也可以声明静态局部变量。4.6.2 模块变量 常用的代码模块有窗体模块Form和标准模块 Module。在这些代码模块的通用代码段中,可以 使用关键字Private或者Dim声明模块级变量。模 块变量的作用域是其所属的整个模块,模块中的 所有过程都可以访问和修改该变量。但是,一个 模块的代码是不

12、能访问另一个模块的模块变量的 。当模块运行结束后,模块变量就被释放消失。4.6.3 全局变量 全局变量是所有模块都可以访问和修改的变量。 全局变量由关键字Public声明。全局变量增加了 程序使用这些变量的灵活性,也增加了程序无意 中修改全局变量的风险。因此,在使用全局变量 时要注意这些问题。4.7 实例:求1000以内2、3、5、7的倍数 将通用的功能编写为一个过程,供其他过程调用 ,完成相似的操作,能够提高编程效率、优化程 序结构。 【实例4-1】本实例要使用计算机自动求出1000以 内2、3、5、7的倍数。事实上,求4个质数的倍数 的操作是相同的。因此,可以通过编写通用过程 实现求解。4

13、.7.1 界面设计 本实例主要使用了Label控件、TextBox控件和 CommandBox控件。图是求1000以内2、3、5、7的 倍数的程序运行界面图。4.7.2 实例结构 创建一个新工程,该工程包括一个Form窗体。在 窗体上添加上述控件,控件布局如图4.8所示。4.7.3 程序流程 以2的倍数为例,程序的流程如图所示。4.7.4 代码实现 求1000以内2、3、5、7倍数的实例代码如下所示 。 在程序运行界面中,使用TextBox控件输出各质数 的倍数。将各TextBox控件的Name属性设置为相同 的名称,Index属性分别设置为2、3、5、7。这事 实上是创建了控件数组,在下一章

14、中将详细介绍 。此处,读者只要知道,设置了Index属性,就可 以使用公用的语句,如 txtMultiple.Item(Num).Text,输出对应与2、3 、5、7的倍数数据。4.8 综合练习编写一个求3个数中最大值Max和最小值Min的过程,然后用 这个过程分别求5个数、7个数中的最大值和最小值。 编写一个求3个数中最大值Max和最小值Min的过程是比较简 单的。但是要用这个过程解决5个数、7个数,甚至更多的 数就不易实现。对于一个过程来说,允许若干个参数可选 ,但是,参数的总个数是一定的。4.9 常见问题1 VB过程参数传递方式按值和按地址有什么区别? 按值传递时,实参将其复制给形参,形

15、参在过程运算中改变时,对实参没有任何影响 。当实参为常量、表达式或者在定义过程时使用ByVal关键字时,过程参数传递方式 都是按值传递。 按地址传递时,实参将其存储地址传递给形参,形参与实参共享同一个内存地址。形 参在过程运算中改变时,实参也会一起变化。当实参为变量或者定义过程中使用 ByRef关键字时,过程参数传递方式都是按地址传递。 当实参为下一章中所介绍的数组时,过程参数的传递方式也是按地址传递。当实参为 变量时,可以给变量名加括号“()”来改变参数传递方式,将按值传递改为按地址传 递。 2 为什么在定义Function过程要在下面给过程名赋值,调用的时候才能使用?原理 是什么? VB的

16、函数值返回方式与C语言是不同的。在VB中,如果使函数能够返回正确的值,就 必须在函数过程的最后,将需要返回的数据赋给函数名。这与C语言中使用Return语 句返回函数值的功能是一样的,只是形式不同。比如如下代码: Function Caculate(ByVal x As Integer, ByVal y As Integer) As Integer Caculate=x * y End Function 必须使用Caculate=x*y才能返回正确的函数值。而不能像C语言中,定义z=x*y实现函 数值的返回。 4.9 常见问题3 VB子过程中能否有两个数组作为形参? VB子过程的参数个数可以有多个,当然可以将多个数组作为参数。数组的 概念和使用将在下一章中详细介绍。但是,值得提醒的是,无论参数是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号