第8章-子过程和函数过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

28
Private Sub Command1_Click() Dim Ch As String * 1, Line As Integer 'Ch只容纳1个字符 Ch = InputBox("请输入一个要显示的字符") Line = Val(InputBox("请输入显示的行数")) Print_triangle Ch, Line, 1 '以标志1调用过程
'声明Name1,Phone为模块级Variant类型变量 '核对姓名,显示提示 '声明N为静态整型变量
Private Sub Command1_Click()
T = CheckName(Text1.Text)
If T <> -1 Then
'以姓名为参数,调用函数CheckBook
MsgBox "欢迎查询!", , "提示"
End Sub
Private Sub Command2_Click() Dim Ch As String * 1, Line As Integer
Ch = InputBox("请输入一个要显示的字符")
Line = Val(InputBox("请输入显示的行数")) Print_triangle Ch, Line, -1 End Sub
19
3.过程定义步骤
Sub 过程名([参数列表]) [ 语句块 ] End Sub
• 打开代码窗口,对象框中选“通用”,然后输
入过程首行并回车,VB自动显示End Sub
• 然后再输入过程体就可以了。如:
• 定义过程Hello:实现以姓名为参数显示
“XXX你好!”(XXX具体内容由参数决定)
20
• 完整代码应为:
27
8.4.2 调用Sub过程—字符三角形
Sub Print_triangle(S As String, Line As Integer, Flag As Integer) '通用过程 Dim A As Integer, B As Integer, i As Integer, j As Integer Cls If Flag = -1 Then A = Line: B = 1 Else A = 1: B = Line For i = A To B Step Flag '正:从小到大循环,倒:从大到小循环 Print Tab(Line + 10 - i); For j = 1 To 2 * i – 1 : Print S; : Next j Print Next i End Sub
• 调用事件过程 • 变量的存储类别和作用域。 • 编写过程,可以实现代码重复使用。
2
8.1.1 什么是过程
• 过程是编写程序的功能模块
• 使用过程主要有以下两方面的原因: 1.可以把复杂的问题简单化 • 任务分解为子任务,子任务用过程实现 • 使程序结构清晰、易读,也便于调试和维护。
2.可以实现代码重复使用
Sub Hello(XXX As String)
MsgBox XXX & "你好!" End Sub • 以上过程的过程名为Hello • 形式参数为XXX且是字符串型
• 过程体只用了一句MsgBox,并同时使用了
参数XXX。
21
• 程序中使用调用语句可调用Sub过程 • 过程运行完毕或跳出过程运行后,返回到调用 处。 1.调用Sub过程的方法 • 过程定义在当前模块或标准模块中 • 使用以下两种格式之一: 格式一:过程名 [实参数列表] 格式二:Call 过程名[(实参数列表)] • 如Hello过程,可以使用: Hello "王小红" 或 Call Hello("王小红")
26
8.4.2 调用Sub过程
【例8-3】设计一个如图所示的程序,其作用是显示字 符图案。显示的字符和行数由输入决定,形状可以 是正三角形或倒三角形。 • 编写通用过程Print_triangle,输出三角形图案。 • 显示的字符S、行数Line、及作为正或倒的三角形 标志Flag 均作为参数 • Print_triangle供两个命令按钮调用 • 两个命令按钮的Click事件: • 输入1个字符和行数,调用 Print_triangle过程。
• Sub过程一般指通用子过程,可在程序中调用执 行,执行完毕后无返回值。
• 它可以定义在窗体模块的通用对象中,也可以 定义在标准模块中。格式: Sub 过程名([参数列表]) [ 语句块 ] End Sub
17
1.关于格式
• 过程名的命名方式与变量名命名一致。
• 参数列表为调用时传递给Sub过程的参数,用 逗号间隔。 • Sub过程也可以没有参数,但括号不可省。 • 参数的常用语法是:参数名 [As 类型说明]
• Command1_Click事件:核对姓名,显示提示 • Text1_KeyPress事件:核对姓名,显示提示 • CheckName 函数过程:判断此人是否存在, 得下标/-1。 • 姓名和电话号码为模块级变量、N为静态变量。
8
Dim Name1, Phone Static N As Integer Dim T As Integer
Text1.Visible = False : Command1.Visible = False
Label1.Caption="姓名:" & Text1.Text & Chr(13) & "电话:" & Phone(T) Label1.Left = (Form1.ScaleWidth - Label1.Width) / 2 '让标签在中间
25
【例8-2】分析以下程序:
Sub A(n As Integer) Dim i As Integer For i = 1 To n: Print i;: Next Call B Print End Sub Sub B() Print "BBBBBB" End Sub Private Sub Command1_Click() Call A(9) B '直接使用过程名调用过程B() End Sub
23
2.关于过程调用时的参数 • 过程调用时的参数称为实际参数,简称实参。 • 它可以变量、常量或表达式。 • 实参与形参的个数应相同、类型应一致 • 若实参是表达式,则先计算值,再将值送 给对应的形参。 • 实参和形参可以使用同名变量。 • 如果定义的过程没有形参,则调用时就没有 实参。
24
• 使用Call调用时,实参部分要加上括号
14831窗体模块一个应用程序可以创建多个窗体模块15832标准模块和submain过程标准代码模块一般存放与特定窗体或控件无关的通用过程全局变量的声明等一个过程要被多个不同对象或模块调用时那么该过程一般可放在标准模块中
1
本章主要介绍:
• 定义Sub过程
• 定义Function函数过程
• 调用Sub过程或Function函数过程
11
Function CheckName(Na As String) As Integer „函数过程,返回位置 Dim i As Integer CheckName = -1 For i = LBound(Name1) To UBound(Name1) ‟线性查找法 If Name1(i) = Na Then CheckName = i: Exit For Next I End Function Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command1_Click „遇回车时,调用事件过程 End Sub
• 定义时的参数,又称为形式参数,简称形参。
• Sub和End Sub必须成对出现
18
2.关于语句块
Sub 过程名([参数列表]) [ 语句块 ] End Sub
• 语句块即为过程体,与事件过程的代码编写一 样
• 包含变量声明和可执行的语句、方法等 • 可以由顺序、分支、循环三种结构综合而成。 • 语句块中可直接使用参数 • 说明:语句块中不能重复声明形式参数。
22
• 过程定义在窗体模块中而调用语句在其它模 块中 • 采用以下两种格式之一: 格式一:窗体名.过程名 [实参数列表] 格式二:Call 窗体名.过程名[(实参数列表)] • 调用Sub过程的方法也可以用来调用事件过程, 如例4-10,可用: Private Sub Check2_Click() Check1_Click '这时调用的过程名 即为Check1_Click End Sub
• 窗体模块文件的扩展名为.Frm
• 一个应用程序可以创建多个窗体模块
14
8.3.2 标准模块和Sub Main过程
• 标准代码模块一般存放与特定窗体或控件无关 的通用过程、全局变量的声明等
• 如求阶乘
• 一个过程要被多个不同对象或模块调用时,那 么该过程一般可放在标准模块中。 • 一个应用程序可建立多个标准模块
9
Else
N=N+1
If N < 3 Then
'核对次数加1
MsgBox "你输错了,这是第" & N & "次错,请重输!", , "提示" Text1.Text = "" : Text1.SetFocus Else MsgBox "你已经输错3次了!再见!", , "提示" End
End If
• 输入姓名后,单击“确定”或按回车键,使姓名 与内部储存的一批姓名核对,若存在,则显示 “欢迎查询”内并使窗体只显示标签,且文字为 姓名和对应的电话号码。最多允许输入3遍。
• 控件: • 1个标签、1个文本框 • 1个“确定”命令按钮
7
• 过程:
• Form_Load事件:储存一批姓名和电话号码 等
4
• 通用过程
• 往往用于处理不需要有返回值的一些基本任 务 • 如显示矩阵。 • Function函数过程: • 可作为函数使用,它一般应有一个返回值 • 如求阶乘。
5
• 调用流程如图:
VB的应用程序就是由若干个过程构成的。
6
【例8-1】设计程序,其作用是根据姓名查电话号码。
29
'以标志-1调用过程
8.4.3 Exit Sub语句
• 使用Exit Sub语句可以中途结束子过程的运行。
• 程序不再执行Exit Sub到End Sub之间的代码, 而是直接返回到调用处。 • Exit Sub语句一般往往与If语句合用,如: • 修改例8-3中的Print_triangle过程,当Line 参数小于等于0,Flag参数不等于±1时, 显示“参数错误”并退出过程。
12
• VB中的模块属于工程资源
• 它由过程或声明构成,以独立的文件管理。
• 工程中包含窗体、类和标准模块文件
• 本节介绍
• 窗体模块 • 标准模块。
13
8.3.1 窗体模块
• 窗体模块是大多数VB应用程序的基础
• 窗体模块与窗体对应,存放窗体上所有信息: • 窗体及窗体上各控件界面信息、属性、事件过程 • 通用过程 • 变量和常量的声明等。
• 可以避免重复编写的烦琐 • 可以减少出错。
3
8.1.2 过程分类与调用流程
• VB中的过程分成两大类:
• 事件过程: • 由对象的某个事件驱动执行 • 如Click事件过程、Load事件过程等 • 通用过程
• 由用户自已定义的完成某一功能的过程。
• 通用过程不属于任一对象,不由事件驱动
• 使用专用的调用语句来执行它
• 建立标准模块的方法是: • 使用“工程”菜单的“添加模块”命令项。
15
• 应用程序启动时,可先装载窗体,也可先运行 Sub Main过程 • Sub Main是过程名为Main的特殊过程 • Sub Main过程必须放在标准模块中才可作为 启动对象。 • 启动对象可以在工程属性中设置
16
8.4.1 定义Sub过程
End If End Sub
10
Private Sub Form_Load()
'初始化数组、设置属性
Label1.AutoSize = True
Text1.Text = "": Label1.Caption = "姓名:" : Command1.Caption = "确定" Name1 = Array("张小红", "李小芳", "王小华", "王力", "李季", "黄大海") Phone = Array(8820123, 8882011, 7812321, 2444522, 1243211, 3434555) End Sub
• 不使用Call关键字,直接用过程名调用时, 参数部分不能加上括号,但过程名和第一个 参数之间要有空格。 • 例如,编程:要求输入姓名,调用Hello过 程,则程序如下:
Private Sub Command1_Click() Dim S As String S = InputBox("请输入姓名") Hello S End Sub
相关文档
最新文档