VB学习资料__第七章 过程和变量的作用域

合集下载

VB课件7.1

VB课件7.1

(6)在Function过程内部不得再定义Sub过程 或Function过程,即不可嵌套定义。
Function过程添加
例:编写一个Function过程total,实现对一维数组元素的求和
函数名为total
Public Function total(a() As Integer) As Long Dim i As Integer 函数的返 回值类型 For i = 1 To UBound(a) 为long 函数体 total = total + a(i) Next i 函数名=表达式 End Function
过程体
7.2 Function过程
1999—2001
Function过程定义
[Privatel| Public] [Static] Function 函数名 ([ 参数 列表]) [AS数据类型] [局部变量和常数声明] [语句块]
[函数名 = 表达式]
[Exit Function] [语句块] [函数名 = 表达式] End Function
若有多个参数时,各参数之间用逗号分隔;
VB的过程可以没有参数,但一对圆括号不可以省略。 不含参数的过程称为无参过程。 形参格式为: [ ByVal ] 变量名[()] [As 数据类型] ByVal:表明其后的形参是按值传递参数. ByRef:表明其后的形参是按地址传递参数 若形参前缺省ByVal和ByRef时,指的是按地址传 递.
3)控件事件过程
语法:Private Sub 控件名_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub
例:Private Sub command1_click() Msgbox(“you click the command button”) End Sub

vb变量的声明及作用域

vb变量的声明及作用域

Vb变量一、不指定变量类型,直接使用,如Private Sub Form_Load()a = 2b = 3c = a + bMsgBox cEnd Sub这时的变量类型是variant(变体型),由vb自动指定数据类型和进行类型转换如果指定变量类型,用dim进行声明,如Private Sub Form_Load()Dim a As Integer, b As Integer, c As Integera = 2b = 3c = a + bMsgBox cEnd Sub如果我们不对变量声明而是直接使用,如果拼错变量名的时候,vb就会自动创建一个新的变量。

为了防止这种情况的发生,vb提供了option explicit语句,就必须使用dim声明所有的变量。

Option explicit这一语句要写在声明段中,而不是写在过程中,如使用了option explicit语句,当未声明变量时,vb会弹出错误警告,如二、变量的作用域1、局部变量局部变量在过程内部定义,用dim或者是private定义,本模块的其他过程和其他模块的过程不能访问,只能应用在本过程中。

如单击command1按钮时的运行效果,i的值是8,此变量在本过程中被访问执行单击command2按纽时的运行效果,i的值是空,说明i是command2_click()事件过程中的值,而不能访问command1_click(),这两个i是不同的i,所以在不同的过程中可以声明相同名字的局部变量,它们各自独立互不干扰2、模块级变量模块级的变量在通用段处声明,用dim或者是private进行定义,不管是在窗体模块form中,还是在标准模块module中,对于本模块中的所有过程都有效。

下面的例子,首先设置程序的入口为sub main(),执行时module1中的i的值是0,而form1中的i的值都是8,说明模块级的私有变量仅在本模块中使用,对于其他模块不可用3、全局变量全局变量用public进行定义,所有模块都可以访问。

VB第7章 过程

VB第7章 过程

(9) Sub过程不能嵌套定义,即在Sub过程中 不可以再定义Sub过程或Function过程, 但可以嵌套调用。
第7章 过程
36
2.建立Sub过程
(1)第一种方法: (a) 在代码窗口的对象列表框中选“通用”,并在 文 本编辑区空白处键入“Private Sub”或“Public Sub”; (b) 按Enter键,即
创建一个Sub过程。
第7章 过程
37
(2)第二种方法:
2.选择“工 1.打开代码 具”菜单 编辑器窗口 的“添加 过程”
3.输入过程名; 选定过程 类型; 选择过程的应用 范围
第7章 过程
38
7.2 Function过程定义
Visual Basic的函数: 1、内部函数 2、Function语句编写的函数(过程)
第7章 过程
33
[Optional][ByVal][ByRef] 变量名[()] [As数据类型]
ByVal : 表明其后的形参是按值传递参数 ByRef : 其后的形参是按地址传递(默认方式) 变量名[( )]:变量名后无括号则表示该形参是变量, 否则是数组。
As数据类型:该选项用来说明变量类型,若缺为变体 变量型。
Private Sub Area
定义;形参 ’定义通用过程
(X As Single, Y As Single, Z As Single, S As Single) Dim p As Single
p = (X + Y + Z) / 2
S = Sqr(p * (p - X) * (p - Y) * (p - Z)) End Sub Private Sub Form_Click() …... Call Area(3,4,5,S) ’调用通用过程

VB-第7章 过程和函数.ppt

VB-第7章 过程和函数.ppt
• Sub过程的建立方法与Function过程的建立方法相同,可以 在代码窗口中直接输入,也可通过执行“工具”菜单中的 “添加过程”命令生成过程模板。
119 9
Sub过程的调用
定义一个Sub过程之后,必须使用Call语句调用该过程。 调用格式一:Call <过程名> [(<实参表>)] 调用格式二:<过程名> [<实参表>]
• 事件过程由VB预先定义,编程人员所要做的工作就是在已 经存在的过程中编写代码。 减少代码的重复性,将重复性较大的代码段独立出来形成 一个过程,这种独立定义的过程叫做“通用过程”。
• 通用过程由编程人员建立,供事件过程或其他通用过程使 用(调用),通用过程也称为“子过程”或“子程序”,可以 被多次调用。而调用该子过程的过程称为“调用过程”。
·<过程名>:要调用的Sub过程名。 ·<实参表>:要传送给Sub过程的常量、变量或表达式,各参 数之间用逗号分隔。如果是数组参数,则要在数组名之后跟 一对空括号。 ·用Call语句调用一个Sub过程时,如果过程本身没有参数, 则省略<实参表>和括号。 .格式二省略了Call关键字,同时<实参表>两边也不能带括 号。
• Private:可选项。使用Private时表示只有本模块中的其他 过程才可以调用该Function过程。
• Static:可选项。如果使用该选项,则VB只给过程中的所有 局部变量分配一次存储空间,即在应用程序执行期间,每次 调用该Function过程时将保留该过程中的局部变量值。若没 有使用该选项,则每次调用该Function过程时,其中的局部 变量都要被重新初始化。
117 7
Sub过程的定义

VB过程专业知识讲座

VB过程专业知识讲座

7.2.3 函数过程旳调用
Private Sub Form_Click()
Dim x As Integer, mj as single
x = Val(InputBox("请输入半径x"))
mj = circle_area(x)
‘此语句是函数过程旳调用
print mj
End Sub
Public Function Circle_area (ByVal r As single) As single
End Sub
局部变量
Private Sub Command1_Click() dim n As Integer n=n+1 Print "command1被按下了" & n & "次"
End Sub
静态变量 。
静态变量是指:
✓ 用Static 申明旳变量
✓ 或过程名前加关键字Static旳过程内用Dim申明 旳局部变量
CONST Pi=3.14159
'定义一圆周率常量Pi
Circle_area = Pi*r*r
'把成果赋给函数名
End Function
函数过程旳定义
[Static][Private][Public] Function 函数过程名([参数列表]) [As 类型] 局部变量或常数定义 语句块 [函数名 = 返回值(函数值)]
Private Sub swap1(ByVal x%, ByVal y%) Dim t% t = x: x = y: y = t
End Sub
Private Sub swap2(ByRef x%, ByRef y%) Dim t% t = x: x = y: y = t

VB过程与作用域_VB编程

VB过程与作用域_VB编程

函数过程的调用
在Visual Basic 2005中调用Function过程的方法和调用任
何内部函数的方法是一样的, 当然也可以像调用Sub过
程那样调用函数过程。所以调用函数过程有两种方法: (1)<函数过程名> [ (<实参列表>) ]。
(2)Call <函数过程名> [ (<实参列表>) ]。
2. 传址
传址是把实参变量(可以是简单变量、数组元素、数组和结构等)的 地址传送给被调过程。因此实参变量的地址和与之结合的形参地 址是相同的,也就是说形参和实参共用内存的同一“地址”,即 共享同一个存储单元。这样在被调过程中的形式参数值一旦被改 变,相应的实参值也跟随着被改变了。显然,在传递调用时,实 际参数必须是变量,常量或表达式,否则无法传址。
过程的嵌套与递归
在一个过程(子过程或函数过程)中调用另外一个过程,称为过程的 嵌套调用;而过程直接或间接地调用其自身,则称为过程的递归 调用。 1、过程的嵌套调用 不可以在定义的一个过程的代码中定义另外一个过程,但可以在一个 过程中调用另外一个过程,这种调用方式称为过程的嵌套调用。 2、过程的递归调用 递归调用是指一个过程直接或间接调用自己本身。递归是一种十分有 用的程序设计技术。由于很多的数学模型和算法设计方法本来就 是递归的,所以用递归过程描述它们比用非递归方法简洁易读, 可理解性好,算法的正确性证明也比较容易。 在递归调用中,一个过程执行的某一步要用到它自身的前面一步或前 若干步的结果。
小结
本章首先介绍了Visual Basic 2005的过程:子过程(Sub)和函数过程
(Function)以及两者的区别,接下来讨论了过程参数的两种传递
方式:传值和传址。然后介绍了过程的嵌套调用与递归调用,最 后介绍了变量和过程的作用域。 重点及难点: (1)子过程和函数过程的声明、调用方法; (2)参数的ByVal和ByRef两种传递方式; (3)过程的嵌套与递归调用; (4)变量与过程的作用域。

VB过程和变量的作用域

VB过程和变量的作用域

VB过程和变量的作用域VB中,过程是指一段完成特定任务的代码块,而变量则是用于存储数据的容器。

过程和变量的作用域则决定了它们能够被访问或使用的范围。

在VB中,有三种不同的作用域:过程级、模块级和全局级。

1.过程级作用域:过程级作用域是指变量的作用域限制在其所在的过程中。

在过程内声明的变量只在该过程的代码块中可见,超出该过程的范围就无法被访问。

过程级作用域适用于只在特定过程中使用的临时变量。

举个例子,在一个过程中声明如下的变量:```Sub SampleProcedureDim x As Integer'...End Sub```在上面的代码中,变量x只在SampleProcedure过程内部可见。

如果在该过程外部的其他过程或模块中尝试访问x,程序会报错。

2.模块级作用域:模块级作用域是指变量的作用域限制在其所在的模块中。

在模块的任何地方声明的变量,都可以被同一模块内的其他过程使用。

模块级作用域适用于多个过程之间需要共享数据的情况。

举个例子,在一个模块中声明如下的变量:```Dim x As IntegerSub Procedure1'使用变量xEnd SubSub Procedure2'修改变量x的值End Sub```在上面的代码中,变量x可以在Procedure1和Procedure2两个过程中使用和修改。

这是因为x的作用域限定在整个模块内。

然而,在其他模块中声明的变量,无法被本模块中的过程访问。

3.全局级作用域:全局级作用域是指变量的作用域在整个程序中都可见和访问。

全局变量可以在程序的任何地方声明,并且在程序执行期间一直存在,即使当前的过程已经结束。

全局变量适用于多个模块或过程之间需要共享数据的情况。

举个例子,在程序的任何地方声明如下的全局变量:```Public x As IntegerSub Procedure1'使用变量xEnd SubSub Procedure2'修改变量x的值End Sub```在上面的代码中,变量x可以在Procedure1和Procedure2两个过程中使用和修改。

VB第7章过程

VB第7章过程

6
第七章 过程
6.1 引言
1. 引例 2. 过程的定 义与使用
2)过程的定义与使用
定义过程
首先用户必须自定义一个子过程,这个子过 程通常可以完成一个特定的功能,该子过程以一 个名字来标识,可以被其他过程调用,其名字后 面的变量表称为形式参数。
用户自定义子过程与事件过程的区别是: 事件过程的名字是有一定规律的,且不能 改变,即控件名_事件名,而用户自定义 的过程名则由用户自己定义。事件过程的 参数是由系统根据事件给出,面用户自定 义的过程则是根据用户的需要。
辽宁科技大学 < Visual Basic 程序设计>教学课件③ 2007-2
10
第七章 过程
6.2 Sub过程
2)Sub过程的调用
1. Sub过程 的定义 2. Sub过程 的调用
格式:
Call 过程名 (实参列表) 或 过程名 实参列表
说明: ① 实参的个数、类型、顺序应与相应的形参保 持一致,子过程中如果没有形参,则调用中 也无实参。 ② 第2种调用方式与第1种相比,结果一样,只 是去掉Call和一对括号( )。
辽宁科技大学 < Visual Basic 程序设计>教学课件③ 2007-2
9
第七章 过程
6.2 Sub过程
1)Sub过程的定义
1. Sub过程 的定义 2. Sub过程 的调用
Sub过程说明 (1) 在VB中,Sub过程又称为子过程。 (2)子过程名、参数列表、语句块等与函数过程 的要求基本相同。 (3)子过程定义格式中“Sub过程名”和“End Sub”是必不可少的,子过程由“Sub”开始定义, 由End Sub结束,在这两者之间的程序便是能完 成某个功能的程序主体。 (4)在子过程中如果没有形参,调用时括号() 必须省略。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§7.1代码模块的概述V B应用程序(通常称为工程)的组织结构,它由窗体模块、标准模块和类模块组成。

V B程序代码就保存在窗体模块文件(*.F r m)、标准模块文件(*.B a s)或类模块文件(*.C l s)中。

它们形成了工程的一种模块层次结构,如图7-1所示。

图7-1一、窗体模块(文件扩展名为.F R M)窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。

如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。

写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。

二、标准模块(文件扩展名为.B A S)标准模块可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。

写入标准模块的代码不必绑在特定的应用程序上,则在许多不同的应用程序中可以重用标准模块。

三、类模块(文件扩展名为.C L S)在V i s u a l B a s i c中类模块是面向对象编程的基础。

可在类模块中编写代码建立新对象。

这些新对象可以包含自定义的属性和方法。

实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。

§7.2过程的作用域应用程序中的过程有作用域。

所谓作用域,就是过程可在哪些地方被使用。

作用域的大小和过程所处的位置及定义方式有关。

按过程的作用范围分为:窗体/模块级过程和全局级过程。

通用子过程和函数过程既可写在窗体模块中也可写在标准模块中,在定义时可选用关键字P r i v a t e(局部)和P u b l i c(全局),来决定它们能被调用的范围。

[P u b l i c|P r i v a t e]S u b子过程名([形式参数列表])……………E n d S u b1、窗体/模块级过程:加P r i v a t e关键字的过程,只能被定义的窗体或模块中的过程调用。

2、全局级过程:加P u b l i c关键字(或缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。

总结归纳过程的定义及作用域如表7-1所示。

表7-17.3.1 过程级变量——局部变量变量的作用域决定了哪些子过程和函数过程可访问该变量。

变量的作用域分为局部变量、窗体/模块级变量和全局变量。

三种变量作用范围及使用规则如表7-2所示。

表7-21、局部变量(过程级变量)2、窗体/模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用)3、全局级变量(公有的模块级变量)过程级变量——局部变量局部变量:在过程内用声明的变量,在一个过程内部使用D i m或者S t a t i c关键字来声明的变量称为局部变量。

只能在本过程中使用,别的过程不可访问。

所以可以在不同的过程中声明相同名字的局部变量而互不影响。

【例】在一个窗体中可以定义相同名字的局部变量。

P r i v a t e S u b C o m m a n d1_C l i c k()D i m C o u n t A s I n t e g e rD i m S u m A s I n t e g e r. . .E n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()D i m S u m A s I n t e g e r. . .E n d S u b7.3.2 窗体/模块级变量在“通用声明”段中用D i m语句或用P r i v a t e语句声明的变量,可被本窗体/模块的任何过程访问。

但其他窗体或模块却不能引用该变量。

以P u b l i c声明的变量,允许在其他窗体和模块中引用。

例如:在“通用声明”段声明变量如图7-2所示。

D i m t e m p A s S t r i n gP r i v a t e a A s I n t e g e r,b A s S i n g l e图7-27.3.3 全局变量一、全局变量全局变量也称公有的模块级变量,在窗体模块或标准模块的顶部的“通用”声明段用P u b l i c关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。

例如:P u b l i c a A s I n t e g e r,b A s s i n g l e二、应用举例不同作用域变量的使用。

在F o r m1窗体代码窗口输入如下程序:P r i v a t e a%'窗体/模块级变量P r i v a t e S u b F o r m_C l i c k()D i m c%,s%'局部变量c=20s=a+F o r m2.b+c'引用各级变量P r i n t"s=";sE n d S u bP r i v a t e S u b F o r m_L o a d()a=10'给窗体/模块级变量赋值F o r m2.S h o wE n d S u b添加F o r m2窗体,在它的代码窗口输入如下代码:P u b l i c b%'定义全局变量P r i v a t e S u b F o r m_L o a d()b=30'给全局变量赋值E n d S u b运行程序,单击F o r m1窗体,在本例中,在F o r m1窗体的C l i c k事件过程中引用了F o r m2窗体中定义的全局级变量b,由此可以看出在代码窗口“通用声明”段中用P u b l i c定义的变量确实是在整个应用程序中起作用的。

如果将F o r m1代码窗口中的F o r m_C l i c k事件过程做如下变动:P r i v a t e S u b F o r m_C l i c k()D i m c%,s%,b%'局部变量c=20b=40s=a+b+cP r i n t"s=";sE n d S u bs=70结果发生了变化。

原因是在V B中,当同一应用程序中定义了不同级别的同名变量时,系统优先访问作用域小的变量。

上例改动后,系统优先访问了局部变量b,因此结果当然也相应地改变了。

如果想优先访问全局变量,则应在全局变量前加上窗体/模块名。

7.3.4 关于多个变量同名一、公用变量与局部变量同名在不同过程中定义同名变量,它们互不影响,但若在一过程中定义使用了与全局变量同名的变量,则应注意。

在过程中,如果定义了与模块级变量(在通用部分使用P r i v a t e或D i m 声明的变量),则在该过程内不能引用同名的模块级变量。

例如:上面的例子中,如果将定义全局变量的语句P u b l i c T e m p A sI n t e g e r改为P r i v a t e T e m p A s I n t e g e r则在C o m m a n d1的单击事件中就不使用模块级的T e m p变量。

P u b l i c T e m p A s I n t e g e r'定义全局变量P r i v a t e S u b F o r m_L o a d()T e m p=1'将全局变量T e m p的值设置成1E n d S u bP r i v a t e S u b C o m m a n d1_C l i c k()D i m T e m p A s I n t e g e r'定义局部变量T e m p=2'将局部变量T e m p的值设置成2P r i n t"t e m p=";T e m pP r i n t"t e m p=";F o r m1.T e m pE n d S u bP r i v a t e S u b C o m m a n d2_C l i c k()P r i n t"t e m p=";T e m pE n d S u b二、全局变量同名如果不同模块中的全局变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。

例如:如果有一个在F o r m1和M o d u l e1中都声明了公用的I n t e g e r变量i n t X,则把它们作为M o d u l e1.i n t X和F o r m1.i n t X来引用便得到正确值。

也就是说如果不同模块中的全局变量使用同一名字,引用时就需要使用“模块名.变量名”的形式来区分它们。

7.3.5 静态变量局部变量除了用D i m语句声明外,还可用S t a t i c语句将变量声明为静态变量,它在程序运行过程中可保留变量的值。

也就是说,每次调用过程后,用S t a t i c说明的变量会保留运行后的结果;而在过程内用D i m说明的变量,每次调用过程结束,都会将这些局部变量释放掉。

当下一次执行该过程时,它的所有局部变量将重新初始化。

D i m声明:随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。

S t a t i c声明:每次调用过程,变量保持上次调用结束时的值。

局部变量的存活期由其定义的关键词来决定。

局部变量声明形式:S t a t i c变量名[A s类型]S t a t i c F u n c t i o n函数过程名([参数列表])[A s类型]S t a t i c S u b子过程名[(参数列表)]注意:若在函数名、过程名前加S t a t i c,则表示该函数、过程内的局部变量都是静态变量。

【例】使用S t a t i c S u b语句的示例S t a t i c S u b S u b t e s t()D i m t A s I n t e g e r't为静态变量t=2*t+1P r i n t tE n d S u bP r i v a t e S u b C o m m a n d1_C l i c k()C a l l S u b t e s t'调用子过程S u b t e s tE n d S u b程序运行分析:单击窗体次数,比较使用模块变量和静态变量的差别。

运行后,多次单击命令按钮C o m m a n d1。

137……将S t a t i c S u b改为P r i v a t e S u b后,运行过程中多次单击命令按钮C o m m a n d1。

1117.4.1 设置启动对象一个稍微复杂的应用程序,不仅有多个窗体,还可能有标准模块和类模块,如图7-3所示。

在多模块程序中,有启动对象的设置、窗体的加载与卸载、窗体的加载与卸载时的事件、多模块间数据的传递等问题。

相关文档
最新文档