Download presentation
Presentation is loading. Please wait.
1
Visual Basic程序设计 第八章 过程 -子程序和函数
2
主要内容 子程序(Sub过程) 函数(Function过程) 参数传递 过程的嵌套调用和递归调用 鼠标和键盘事件
3
自定义子程序 t=x : x=y : y=t [Public|Private|Static] Sub <子程序名>
( [参数及其类型列表] ) <程序代码> End Sub 例如:交换两个变量内容的子程序: Public Sub Swap (x,y) dim t t=x : x=y : y=t End Sub
4
自定义函数 [Public|Private|Static] Function <函数名>
([参数及其类型列表] )[As <类型>] <程序代码> (内含: <函数名>=<返回值表达式>) End Function 注意:函数与子程序的区别 (1)函数必须有返回值,子程序没有。 (2)如果不指明函数的类型(即其返回值的类型), 则其类型是变体型(Variant型) (3)函数用在表达式中,子程序不能。
5
子程序的调用 格式: Call <子程序名>(参数列表) 或者 <子程序名> 参数列表
6
子程序和函数的参数 形参-形式参数,定义部分所使用的参数。 实参-实在(实际)参数,调用时传递给子程序或函数的参数。
例如:下面的x和y是形参,a和b是实参。 定义子程序 Swap: Sub Swap (x,y) Dim t t = x : x = y : y = x End Sub 调用子程序 Swap: ….. Swap a , b '交换
7
参数的传递方式 在子程序或函数的调用过程中,实参内容传递给相应的形参可以有两种方式:传址和传值 传址(ByRef) :将实参地址传给形参。
传值(ByVal) :将实参的值传给形参。 区别: 传址时,形参与实参是同一个内存区域,因而实参随形参的改变而改变。 传值时,形参被单独分配内存并获得实参的值,因而形参的改变并不改变实参的值。
8
传值和传址的区别 ↕ Swap 传值 Swap a , b '交换 Sub Swap (x,y) Dim t
543 调用子程序 Swap: ….. Swap a , b '交换 形参 x ← 实参a: Swap 传址 ↕ 形参 y ← 实参 b: 21 x: ← a: 543 543 定义子程序 Swap: Sub Swap (x,y) Dim t t = x : x = y : y = x End Sub ↕ Swap 传值 y: ← b: 21 21
9
实例: ‘求直角三角形的斜边 Private Sub Root(ByVal a, ByVal b, c)
c = Sqr(a ^ 2 + b ^ 2) End Sub c b a ‘调用: …… Root 3 , 4, z Print z ‘打印结果 5
10
自定义函数的实例 ‘用函数求直角三角形的斜边 Public Function Hyp(x !, y !) As Single
Hyp = Sqr(x ^ 2 + y ^ 2) End Function ‘调用: …… Print Hyp (3,4) ‘打印结果 5
11
变量与过程的作用域 在声明变量和过程时: 变量的作用域 过程的作用域 Static:作用? 在什么地方声明? 用什么关键字? 过程级 模块级
过程内部 过程外部(模块的通用段) 用什么关键字? Dim Static Private Public 变量的作用域 过程级 模块级 全局变量 过程的作用域 全局级 Static:作用?
12
变量声明 格式: 有效范围:过程→模块→全局(公用) 隐式声明和显式声明:Option Explicit 组合声明:
Dim|Public|Private|Static <变量名> [as <类型>] 有效范围:过程→模块→全局(公用) 隐式声明和显式声明:Option Explicit 组合声明: 例: dim i as integer, j as single, s as string 或: dim i%, j!, s$
13
VB应用程序的组成 VB应用程序 .vbp 窗体模块 .frm 类模块 .cls 标准模块 .bas 函数过程 (Function) 子程序
(Sub) 事件过程 函数过程 (Function) 子程序 (Sub)
14
变量的作用域 过程级:在过程内部声明,使用Dim或Static关键字。只能在过程内部使用。
模块级:在模块的通用段声明,使用Dim 或Private关键字。可以在该模块的所有过程中使用。 全局:在模块的通用段声明,使用Public关键字。可以在整个应用程序中使用。如果是在窗体模块内声明,则引用时需要在变量名前面加窗体名。例如:Form1.a
15
变量的生存期 动态变量:声明时产生(分配内存),过程结束立即释放。用Dim声明。
静态变量:过程结束后不释放内存,其值保留。下次访问该过程时仍有效。用Static声明。
16
变量的作用域 作用域: 过程级 模块级 全局变量 窗体 标准模块 声明方式 Dim Static Private Public 声明在:
过程内 模块的通用声明段 本模块其他过程: 不能用 能用 其他模块: 能用,但要加窗体名.
17
过程的作用域 模块级:用Private关键字声明 全局级:用Public关键字声明
在标准模块内声明:可以直接调用 在窗体模块内声明:需要在过程名前面指定对象(窗体)名。 静态(Static):该过程内所有过程级变量均为静态变量。
18
鼠标事件 Click 单击 DblClick 双击 MouseDown 按下 MouseUp 放开 MouseMove 移动
DragDrop 拖放 DragOver 拖过 有关问题 同时发生时的先后次序 事件过程中的参数 Button 区分左右键 Shift 键盘配合 X,Y 指针位置 有关属性 有关方法 例
19
MouseDown和MouseUp事件 Button参数,由按下的鼠标键决定: 1-左键,2-右键,4-中键
Shift参数,由先按下的键盘键决定: 1-<Shift>键 2-<Ctrl>键 4-<Alt> 键 先按下多键时,数值相加
20
与鼠标有关的属性 MousePointer 指针形状 MouseIcon 自定义指针形状 当MousePointer=99时的指针形状
DragMode 0-手工,1-自动 自动:可以拖动,此时Click事件和 MouseDown事件失效 手工:需编程(用Drag方法)才能拖动
21
DragDrop事件 发生在目标对象,而不是被拖动对象上
参数:Source As Control,X As Single,Y As Single Source 被拖动对象 X,Y 放下时的X,Y坐标 有关属性 DragMode: 0-手工,1-自动 DragIcon:拖动时的图标 Drag方法:Drag [Action] Action:0-取消,1-开始(缺省),2结束 例
22
DragOver事件 在拖动越过一对象时发生 参数: Source As Control,X As Single,Y As Single
X,Y 放下时的X,Y坐标 State 0-进入时,1-退出时,2-在其中 例
Similar presentations