版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 VisualBasic 程序设计,过程 过程调用 参数传递 Sub Main过程与快速启动窗体 程序举例,4.1 过程:,过程:将复杂的程序分割成的较小的逻辑部件。每个过程编写一段程序。一个过程可以被另一个过程调用 VB的过程:子程序过程(Sub Procedure)、函数过程(Function Procedure)、属性过程(Property Procedure) 一、Sub过程:无返回值 可以放在窗体模块或标准模块中。有两种类型: 事件过程和普通过程。语法: Private|PublicStatic Sub 过程名(参数列表) 局部变量和常量声明 语句组 End Sub,1.事件过
2、程:对象的某个事件发生时执行的代码 分类:窗体事件过程和控件事件过程。 事件过程前面的声明都是Private 窗体事件过程的定义均为: Private Sub Form_事件名(参数列表) End Sub MDI窗体的事件过程名为: MDIForm_事件名 控件事件过程名的定义: Private Sub 控件名_事件名(参数列表) End Sub 建立事件过程: 双击控件/窗体,进入代码编辑窗口在事件列表中选事件 点击“工程资源管理器/察看代码”,进入代码编辑窗口在对象列表中选对象后,在事件列表中选事件。,2.通用过程:C中的子程序 可以保存在两种模块中:窗体模块(frm)和标准模块(bas)
3、中 (1)定义 语法: Private|PublicStatic Sub 过程名(参数列表) 局部变量和常量声明 Exit sub 语句组 End Sub Private|Public,默认Public Static:局部静态变量,在调用结束后仍保留sub过程中的变量值 局部变量和常量声明:过程内部用到的变量和常量 Exit sub:结束本过程的执行,返回到调用者过程,执行调用语句的下一条语句。,sub过程不能嵌套定义,但可以嵌套调用 参数列表:形式参数,接受从调用者处传来的参数 语法:ByVal|ByRef 变量名() As 数据类型 ByVal:该参数按值传递 ByRef:该参数按地址传递
4、 (2)通用过程的建立 方法一: 打开“代码编辑器” 工具/添加过程 在添加过程对话框输入过程名 单击“确定”按钮,方法一: 打开“代码编辑器” 对象列表框中的“通用” 输入:Public Sub AAA() “回车”,二、Function过程:有返回值 语法: Private|PublicStatic Function 函数名(参数列表) As 数据类型 局部变量和常量声明 函数名=表达式 Exit Function 语句组 函数名=表达式 End Function,4.2 过程的调用:,一、调用Sub事件过程 两种调用方法: 发生的事件自动调用 在其他过程中用于据调用,语法: Call 过
5、程名(参数列表)或过程名(参数列表) 参数列表:实参 Private Sub Command1_Click() Text1.Text = Hello End Sub Private Sub Form_DblClick() Call Command1_Click End Sub,二、调用Sub通用过程 在其他过程中用于据调用,语法: Call 过程名(参数列表)或过程名(参数列表) Private Sub Form_Click() Call aaa End Sub Public Sub aaa() Print Hello End Sub,三、调用Function过程 语法: Function 函
6、数名(参数列表) 或 Call 函数名(参数列表) 或 函数名(参数列表) 说明:无参数时,()不能省略 调用方法同系统内部函数,例:用辗转相除法求最大公约数,Public Function Divisor(ByVal x As Integer, ByVal y As Integer) 计算x,y的最大公约数 Dim r As Integer r = x Mod y Do While r 0 x = y y = r r = x Mod y Loop Divisor = y End Function,Private Sub Form_Click() Dim a, b, c As Integer
7、a = InputBox(please input a) b = InputBox(please input b) c = Divisor(a, b) MsgBox Str$(a) + 与 + Str$(b) + 的最大公约数为: + Str$(c) End Sub,4.3 参数的传递,一、形参与实参 1.形参:被调用过程中的参数 2.实参:主调过程中的参数 3.形参的数据类型:没有声明时默认为Variant 4.形参与实参的类型以及个数必须一致,否则会出错。 5.使用可选的参数:在参数中含有Optional关键字的参数是可选的,如果某一参数为可选参数,则参数表中此参数后的其他参数也必须是可选
8、的,并要用optional来声明。例: Public Sub exam(Optional a As Integer, Optional b As Integer) End Sub,二、参数的按值传递和按地址传递 1.按值传递参数,将参数值传递给普通过程,如果普通过程中对该变量进行了操作, 变量的值发生变化,那么变化后的该参数变量的新值不会通过其 地址传出来。传值时参数变量前面要加上“Byval” 例: Sub zerox (Byval x as single)Private Sub Form_Click() x=x-xDim x as Single End Subx=5 zerox x pri
9、nt x End Sub 执行结果为:5,2. 按地址传参数 将参数变量的地址传递给普通过程,如果普通过程中对该变量进 行了操作,变量的值发生变化,那么变化后的该参数变量的新值 将通过其地址传出来。 例: Sub zerox(a As Single) a = a - a End Sub A与x共用一个地址 运行结果:0,Private Sub Form_Click() Dim x As Single x = 5 zerox x Print x End Sub,3. 例:求5!+4!+3!+2!+1!,Private Sub Form_Click() Dim sum As Integer, i
10、As Integer For i = 5 To 1 Step -1 sum = sum + multiply(i) Next i Print sum=; sum End Sub,Public Function multiply(n As Integer) As Integer multiply = 1 For i = 1 To n multiply = multiply * i Next i End Function,运行结果:153,Private Sub Form_Click() Dim sum As Integer, i As Integer For i = 5 To 1 Step -1
11、 sum = sum + multiply(i) Next i Print sum=; sum End Sub,Public Function multiply(n As Integer) As Integer multiply = 1 Do While n0 multiply = multiply * n n=n-1 Loop End Function,运行结果:120,Private Sub Form_Click() Dim sum As Integer, i As Integer For i = 5 To 1 Step -1 sum = sum + multiply(i) Next i
12、Print sum=; sum End Sub,Public Function multiply(byVal n As Integer) As Integer multiply = 1 Do While n0 multiply = multiply * n n=n-1 Loop End Function,运行结果:153,全局变量定义的方法:工程/填加模块/打开,进入定义界面。,定义之后按保存按钮,将对全局变量的定义以.bas文件的形式保存 到工程中,再打开时,从“工程资源管理器”窗口中找“模块”, 再从中找到要打开的定义。,二、静态变量 静态变量的存活期:整个应用程序运行期间 作用范围:取决
13、于该变量是模块级、局部级还是全局级,Private Sub Form_Click() Static i As Integer i = i + 1 Print i End Sub,例:各种不同变量的作用域。 在一个窗体中填加两个按钮,其中一个的Caption属性改为 “点击”,另一个改为“退出”。当“点击”按钮按下时, 在第一个标签中显示点击次数,测试静态变量的作用域, 同时计算变量a和b的值,其中a由一个全局子过程进行计算, 目的是练习全局变量的作用域,b是一个模块变量,主要练习 模块变量的作用域。 实现步骤: 1.建立一个窗体,在窗体上创建两个标签,其Caption属性分别改 为:“点击次数
14、”、“a的值”;创建两个文本框,其Caption属 性均改为空格;创建两个按钮,其Caption属性分别改为:“点击” 、“退出”。,2.选中“点击”按钮,转入代码窗口,在该窗口中的general中输入 Dim b As Integer,然后在其 Click事件中写入下列 代码: Private Sub Command1_Click() Static c As Integer 将变量c定义成静态变量 c+ c自增1 b=c*pi b赋值为c*pi,pi为常量 compute_a 调用计算a的过程 Text1.Caption=Str$(c) 将c的值和a的值在文本框中显示 Text2.Capti
15、on=Str$(a) End Sub,3.选中“退出”按钮,转入代码窗口,在其 Click事件中写入下列 代码: Private Sub Command2_Click() if b*b*pi300 then 给定退出系统的条件 end else print “不能退出” end if print c 显示c的值 End Sub,4. 在Project菜单中选Add Module命令,在general中输入Global a As Single 及Global Const pi=3.14159,在其下面直接写入下列代码 : Sub compute_a a=1 a=pi*a End Sub 5.按执
16、行按钮运行程序,反复按下点击按钮,看程序的运行结果。 分析结果。 6.将对变量b的定义移到Command1的Click事件中,看运行结果。 Why? 7.将a和pi的定义移到compute_a下面,看运行结果,why?,三、过程的作用范围 Public:全局过程,所有模块的其他过程都可以访问这个过程 Private:局部过程,只有本模块中的其他过程才可以访问这个过程 过程的外部调用:调用其他模块中的过程 语法: Call 窗体名.全局过程名(实参列表),四、使用同名变量 1.不同模块中的全局变量名同名:通过引用“模块名.变量名”,Private Sub Form_Click() Print M
17、odule1.a1, Module2.a1 End Sub Private Sub Form_Load() Module1.a1 = 7 Module2.a1 = 9 End Sub,Module1中 Global a1 As Integer,Module2中 Global a1 As Integer,2.全局变量名与局部变量名相同:过程内局部变量有效,过程外全局变量有效,Module1中 Public a As Integer,Private Sub Form_Click() Dim a As Integer Print a a = 8 End Sub Private Sub Form_Db
18、lClick() Print a End Sub,Private Sub Form_Load() AutoRedraw = True a = 5 Print a End Sub,4.4 Sub Main过程与快速启动窗体,1.通过SubMain过程启动应用程序 当应用程序不加载任何窗体,可以通过在标准模块中创建一个Sub Main过程,然后再Sub Main的过程中编写启动时执行的代码,每个工程只能有一个Sub Main的子过程。,工程/添加模块 工程/工程1属性/启动窗体sub Main Sub main() MsgBox 确定 End Sub,2.启动时快速显示:通常是显示应用程序名、版权信息、简单的位图等,Private Sub Timer1_Timer() Timer1.Enabled = False Form1.Show Unload frmSplash End Sub,4.5 程序举例,1.计算组合公式:,Option Explicit Function calC(ByVal x As Integer, ByVal y As Integer) As Intege
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 世界文化之旅教学设计-
- 2026年时政模拟题(含答案)
- 2026年(完整)三基考试内科试题及答案
- 2026年铣工技能实操考试题库及答案
- 海兴县(2025年)员额法官遴选面试考题及答案
- (2025年)医保新规解读医保知识考试试题及答案
- 2026年新版劳技试题及答案
- 2026年育婴员理论测试题及答案
- 2026年汽车知识试题附答案
- 2026年房建专业安全试题及答案
- 营造林工勤岗技师考试题库及答案
- T/CCIAS 009-2023减盐酱油
- (试卷)2024年广东省初中学业水平考试·物理
- GB/T 3163-2024真空技术术语
- 困难职工帮扶管理制度
- 肿瘤伤口护理
- 办理暂住证授权委托书格式
- JB-T 10693-2022 城市轨道交通.用干式牵引整流变压器
- 装饰装修工程施工组织设计完整版
- 末梢血糖监测护理课件
- 统编版八年级下册语文第五单元测试卷(A)(含答案)
评论
0/150
提交评论