




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、送给Visual Basic 6.0的初学者 应朋友的要求,写这么个东西,这里主要介绍一些学习VB过程中应该注意的问题,因为其他的东西可以从任何一本教材中看到。 1、学习Visual Basic之前最好做好一下几种准备: 知道Windows操作系统中常见部件的名称,例如“按钮、“文本框、“单项选择按钮、“滚动条等。 掌握一定的编程思想或数学思想。或者说有一定的逻辑分析能力。 能经常上机实践,当然最好的学习方法是边看书边实际操作。
2、 初学者推荐阅读高等教育出版社出版的?全国计算机等级考试二级Visual Basic语言程序设计?附带一本课后习题答案、清华大学出版社出版的?Visual Basic程序设计?谭浩强主编。其他的书在很多问题上讲的不清楚。不推荐参考。 2、VB中的主要内容: VB也是一门计算机语言,所以也就防止不了要有各种语法,主要是“变量类型、“选择程序结构、“循环程序结构、“数组、“子函数和子过程、“文件。另外由于VB是可视化的编程工具,所以比传统的QBASIC和C语言多了“控件这一局部。具体需要那些控件教材里面有介绍。
3、160; 3、各个章节的重点难点介绍: 这里的“章节并不是按照教材上的“章节介绍的,而是按照刚刚我划分的“块介绍。并且是按照国家计算机二级VB考试的标准表达的。 1、变量类型 变量和常量的概念。主要的变量类型有:integer、string、long、Boolean、currency、float、double。其中integer、string和Boolean最为常见。 2选择程序结构 几种常见
4、的选择结构。书上都有介绍。学习过程中记得如何判断条件的“真“假,选择不同的程序走向。如果条件为“真,那么怎么样;如果条件为“假,又该怎么样。最后不要忘了End If。 在学习选择程序结构的时候注意培养自己良好的编码风格。看一个例子:Private Sub number_Click(Index As Integer)If lastinput <> "nums" Then disp = Number(Index).CaptionElse disp = disp
5、 + Number(Index).CaptionEnd Iflastinput = "nums"End Sub 不管你是否能看懂这段程序写的是什么,况且这也不是我让你看这段程序的主要目的。你应该注意这段程序的编码风格,就是格式。VB里面几乎每段代码都在一个“Sub和“End Sub中间,所以你在写程序的时候最好使第一行代码向右缩进一个Tab键,按一下键盘上的Tab键,然后输入代码。如果出现“If等语句的时候,“Then后面一行的代码要缩进两个Tab键。不知道是否明白。不明白也没有关系。多看一些优秀代码就明白了。
6、160; 3循环结构 这一局部可以说对初学者来说比拟头疼。特别是循环条件的判定。什么时候要执行循环,什么时候不用执行循环。哪些语句比那些语句少多执行一次循环。 主要的循环语句教材上都有详细的讲解,这一局部要多揣摩,多练习。可以在源程序上用笔划出语句执行的顺序。其实用不了多长时间就明白了。 给出一个典型的例子:“百钱买百鸡Private Sub Command1_Click()Dim x%, y%, z%, t As Data, t1 As DataFor x = 0 To 100For
7、y = 0 To 100For z = 0 To 100If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 ThenPrint "能买母鸡" x; "只,公鸡" y; "只,小鸡" z; "只"End IfNext z, y, xEnd Sub 这段程序可以算是初学者比拟经典的算法。100块钱,要买三种鸡,母鸡3元一只,公鸡2元一只,小鸡0.5元一只。问一共可以买几只。研究完算法之后别忘了看格式。其中Next z,y,x的顺序
8、不能颠倒,也可以写成如下格式:Private Sub Command1_Click()Dim x%, y%, z%, t As Data, t1 As DataFor x = 0 To 100For y = 0 To 100For z = 0 To 100If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 ThenPrint "能买母鸡" x; "只,公鸡" y; "只,小鸡" z; "只"End IfNext zNext yNext xEnd Sub
9、; 4)数组 数组是一种重要的数据结构。要多练习。其中VB里面最容易出错的就是下标!例如定义一个数组Arr(4),那么它一共5个变量:Arr(0)开始,一直到Arr(4)。 5子函数和子过程 这里我沿用QBASIC里面的叫法。在子函数过程局部最容易搞不懂的概念就是“传地址和“传值,即“ByRef和“ByVal,ByRef是默认的。也就是说如果没有在函数的参数列表中注明是那种传递方式,默认按照传地址进行处理。函数中的数值既可以由主函数传递到子函数过程中,也可以由子函
10、数过程回到主函数中。其实我这里说的“主函数是不确切的,应该叫做“主调函数。另外还有一个与之相关的概念是“形参和“实参,就是“实际参数和“形式参数。实际参数是子函数过程中的参数,而形式参数是“主调函数中的参数。 我觉得VB中子函数参数调用应该是比其他计算机语言简单的一个地方,包括C/C+等。在C/C+中,参数传递默认的是传值。就是不能把子函数过程的参数传回主调函数,如果要进行这样的操作,就要借助指针变量。 看一个简单的子函数过程调用的例子:Public Sub Swap(x,y) Dim
11、t As Integer t=x x=y y=tEnd SubPrivate Sub Form_Click() Dim a As Integer Dim b As Integer a=10 b=20 Swap a,b Print a=; a , b=;bEnd Sub
12、0; Form_Click是主调函数,Swap是子函数过程。在主调函数的倒数第三行调用了子函数过程,输出结果为:“a=20,b=10。 6文件 这一局部单独考试出题不多,实际应用中用到的也不多,但是它总是在某些考试中以压轴题的姿态出现。并且更为严重的是:如果对这一局部不清楚,会使整道题都无从下手。所以还是要好好看看这局部为好。 7)常见控件 对于控件最令初学者头疼的是“属性、“事件和“方法这三个概念。
13、160; 这三个概念是“面向对象程序设计专用的。VB6虽然不能算是标准的“面向对象程序语言,但是具备了很多的面向对象特征,唯独不具备“类的继承特征。考虑到初学者对面向对象编程没有根底,所以关于上述三个概念就不能给出确切的定义。但是我们可以这样去理解这三个概念:“属性就是某个控件的固有性质,拿Command按钮控件为例,它的“属性就有“长度、“宽度、“是否显示图片等。简单来说,大多数初学者接触的控件属性,都可以在VB6开发环境中的属性栏找到如果找不到的属性称为“只读属性。 “事件很容易理解。比方我们用鼠标单击一个按钮,这时候“按钮这个控件就接收鼠标的单击,换句
14、话说就是“按钮上发生了单击事件。那么发生单击事件以后程序会做什么呢?那就是运行你编写的针对此事件的程序。现在你翻开VB6的界面,随便画一个按钮,然后双击这个按钮,进入代码视图,在Private Sub Command_Click()和End Sub之间写代码。那么你写的这段代码就是名称为Command的按钮发生Click事件执行的代码。 “方法的概念最不容易理解。按照标准的面向对象编程描述,方法是一个函数,它被封装在类中。其实我们也可以把方法想想成一个“函数,类似上文中描述的“子函数过程。初学者常用的VB6方法不多,其中最常用的就是“Print。正如您所想象
15、的那样,刚刚使用的时候也没有发现它有多么特殊。其实我们已经在使用Print方法了。只不过它所归属的对象我们不需要知道而已。 关于控件的使用这里就不多说了,因为教科书上介绍的比我介绍的详细的多。4、结束语: Visual Basic6.0可以说算是最简单的一门计算机语言。学习的时候多用心。其实前面“变量局部即使记不住也无妨,在后续的学习过程中会不断牢固以前的知识的。更何况现在的考试都带有MSDN,就是VB的帮助系统。如果有哪些关键字或者用法记不清楚了,可以随时查阅MSDN的相关文档。 最后
16、祝各位VB愉快!附:送上几例经典的算法求最大公约数和最小公倍数Private Sub Command3_Click()Dim m1%, m%, n%, n1%, r%, b%m1 = Val(InputBox("输入一个数:")n1 = Val(InputBox("请输入另一个数:")If m1 > n1 Then m = m1: n = n1 Else m = n1: n = m1Dor = m Mod nIf r = 0 Then Exit Dom = nn = rLoopPrint m1; "和" n1; "的最
17、大公约数为:" nb = m1 * n1 / nPrint m1; "和" n1; "的最小公倍数为:" bEnd Sub求100到200之间所有的素数质数Private Sub Command2_Click()Dim i%, m%For m = 101 To 199 Step 2For i = 2 To Int(Sqr(m)If (m Mod i) = 0 Then GoTo notnextM '一旦被2到sqr(m)的数整除就转到下一个数Next iPrint mnotnextM:Next mEnd Sub注意!程序中使用了GoTo
18、语句!VB编程根底教程一 代码模块Visual Basic 的代码存储在模块中。模块有三种类型:窗体、标准和类。简单的应用程序可以只有一个窗体,应用程序的所有代码都驻留在窗体模块中。而当应用程序庞大复杂时,就要另加窗体。最终可能会发现在几个窗体中都有要执行的公共代码。因为不希望在两个窗体中重复代码,所以要创立一个独立模块,它包含实现公共代码的过程。独立模块应为标准模块。此后可以建立一个包含共享过程的模块库。每个标准模块、类模块和窗体模块都可包含: 声明。可将常数、类型、变量和动态链接库 (DLL) 过程的声明放在窗体、类或标准模块的模块级。过程。Sub、Function 或者 Property
19、 过程包含可以作为单元来执行的代码片段。本章后面的“过程概述一节中将讨论这些内容。 窗体模块窗体模块文件扩展名为 .FRM 是大多数 Visual Basic 应用程序的根底。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,那么还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。标准模块标准模块文件扩展名为 .BAS是应用程序内其它模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局在整个应用程序范围内有
20、效的声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,那么在许多不同的应用程序中可以重用标准模块。类模块在 Visual Basic 中类模块文件扩展名为 .CLS是面向对象编程的根底。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。详细信息 关于在类模块中编写代码的更详细的信息,请参阅“用对象编程。注意 Visual Basic 的专业版和企业版也包含 ActiveX 文档、ActiveX 设计器和用户控件。它们介绍了具有不同文件扩展名的新模块类型。从编写代码的
21、角度来看,这些模块应视同为窗体模块。使用“代码编辑器Visual Basic “代码编辑器 是一个窗口,大多数代码都在此窗口上编写。它象一个高度专门化的字处理软件,有许多便于编写 Visual Basic 代码的功能。图 5.4所为示“代码编辑器窗口。图 5.4“代码编辑器窗口因为要操作模块中的 Visual Basic 代码,所以要为每一个从“工程资源管理器中选择的模块翻开一个独立的“代码编辑器窗口。在每个模块中,对于模块中所包含的每个对象,将模块中的代码再细分出与对象对应的独立局部。用“对象列表框实现各局部间的切换。 在窗体模块中,该列表包含一个通用段,一个属于窗体自身的段以及窗体所包含的
22、每一控件的段。对于类模块,列表包括一个通用段和一个类段;对于标准模块,只有一个通用段被显示。每一段代码都可包含几个用“过程列表框访问的不同过程。对窗体或控件的每一个事件过程,窗体模块的过程列表都包含一个独立的段。例如,Label 控件的过程列表就包含 Change 事件段、Click 事件段和 DblClick 事件段等等。类模块只列举类本身的事件过程 初始化和终止。标准模块不列举任何事件过程,因为标准模块不支持事件。模块通用段的过程列表只包含唯一段 声明段,其中放置模块级的变量、常数和 DLL 声明。当在模块中添加子过程或函数过程时,那些过程被添加到声明段下方的“过程列表框中。代码的两种不同
23、视图都可用于“代码编辑器窗口。可以一次只查看一个过程,也可以查看模块中的所有过程,这些过程彼此之间用线隔开如图 5.4 所示。为了在两个视图之间进行切换,利用编辑器窗口左下角的“查看选择按钮。自动完成编码Visual Basic 能自动填充语句、属性和参数,这些性能使编写代码更加方便。在输入代码时,编辑器列举适当的选择、语句或函数原型或值。通过“工具菜单上的“选项命令访问“选项对话框,在“选项对话框的“编辑器选项卡上可用这样的选项,由它们决定是允许还是禁止各代码的设置值。在代码中输入一控件名时,“自动列出成员特性会亮出这个控件的下拉式属性表图 5.5。键入属性名的前几个字母,就会从表中选中该名
24、字,按 Tab 键将完成这次输入。当不能确认给定的控件有什么样的属性时,这个选项是非常有帮助的。即使选择了禁止“自动列出成员特性,仍可使用 CTRL + J 组合键得到这种性能。图 5.5 “自动列表成员功能“自动快速信息功能显示语句和函数的语法图 5.6。当输入合法的 Visual Basic 语句或函数名之后,语法立即显示在当前行的下面,并用黑体字显示它的第一个参数。在输入第一个参数值之后,第二个参数又出现了,同样也是黑体字。“自动快速信息也可以用 CTRL+I 组合键得到。图 5.6 “自动快速信息书签在代码编辑器中书签可用来标记代码的某些行,以便您以后可以很容易地返回这些行。书签开关的
25、切换以及定位到已有书签的命令可以在编辑、书签菜单项或编辑工具栏中得到。详细信息 关于如何使用组合键使用“代码编辑器窗口的各种功能的更详细信息,请参阅“代码窗口的快捷键。编码根底这一局部介绍代码编写机制,包括如何中断和合并代码行、如何添加注释、如何使用数字以及 Visual Basic 命名约定。将单行语句分成多行可以在“代码窗口中用续行符一个空格后面跟一个下划线将长语句分成多行。由于使用续行符,无论在计算机上还是打印出来的代码都变得易读。下面用续行符 ( _) 将代码分成假设干行:Data1.RecordSource = _"SELECT * FROM Titles, Publish
26、ers" _& "WHERE Publishers.PubId = Titles.PubID" _& "AND Publishers.State = 'CA'"在同一行内,续行符后面不能加注释。至于在什么地方可以使用续行符,还是有某些限制的。将多个语句合并到同一行上通常,一行之中有一个 Visual Basic 语句,而且不用语句终结符。但是也可以将两个或多个语句放在同一行,只是要用冒号 (:) 将它们分开。Text1.Text = "Hello" : Red = 255 : Text1.Ba
27、ckColor = _Red但是,为了便于阅读代码,最好还是一行放一个语句。 .详细信息 关于详细信息,请参阅“Visual Basic 的标准、限制和文件格式。在代码中添加注释阅读本手册的例子时常会遇到注释符 (')。这个符号告诉 Visual Basic,忽略该符号后面的内容。这些内容是代码段中的注释,既是为了方便开发者,也是为了方便以后可能检查源代码的其他程序员。例如:' 这是从屏幕左边' 开始的注释。Text1.Text = "Hi!" '在文本框中放 &
28、#160; '欢送词。注释可以和语句在同一行并写在语句的后面,也可占据一整行。上述代码对这两种情况都作了示范。记住,不能在同一行上,将注释接在续行符之后。注意 您可以通过选中两行或多行代码并在“编辑工具栏上通过选择“注释块或“删除注释块按钮来对该代码块添加或删除注释符号。理解数字系统在本文档中,大多数的数值都是十进制的基数为 10。但有时用十六进制数基数为 16或八进制数基
29、数为 8更方便。Visual Basic 用前缀 &H 表示十六进制数,而用 &O 表示八进制数。下表说明同一个数的十进制、八进制和十六进制表示。十进制 八进制 十六进制 9 &O11 &H9 15 &O17 &HF 16 &O20 &H10 20 &O24 &H14 255 &O377 &HFF 通常不必掌握十六进制或八进制数制,因为计算机可以用任何数制的数工作。但是,对某些任务来说,有的数系就比其它数系更适宜,例如利用十六进制数设置屏幕和控件的颜色。Visual Basic 的命名约定在编写 V
30、isual Basic 代码时,要声明和命名许多元素Sub 和 Function 过程、变量、常数等等。在 Visual Basic 代码中声明的过程、变量和常数的名字,必须遵循这些规那么: 它们必须以字母开头。它们不可以包含嵌入的句号或者类型声明字符规定数据类型的特殊字符。它们不能超过 255 个字符。控件、窗体、类和模块的名字不能超过 40 个字符。它们不能和受到限制的关键字同名。 受到限制的关键字是 Visual Basic 使用的词,是语言的组成局部。其中包括预定义语句比方 If 和 Loop、函数比方 Len 和 Abs和操作符比方 Or 和 Mod。详细信息 关于关键字表的更详细信
31、息,请参阅语言参考。窗体和控件可以和受到限制的关键字同名。例如,可以将某个控件命名为 Loop。但在代码中不能用通常的方法引用该控件,因为 Visual Basic 会认为 Loop 意味着关键字。例如,这样的代码就会出错。Loop.Visible = True ' 出错。为了引用那些和受到限制的关键字同名的窗体或控件,就必须限定它们,或者将其用方括号 括起来。例如,下面的代码就不会出错。MyForm.Loop.Visible = True
32、60; '用窗体名 '将其限定。Loop.Visible = True
33、'方括号 '起了作用。在引用窗体和控件时都可以用这种方式使用方括号,但在声明变量或定义过程期间,当变量名或过程名与受到限制的关键字相同时,这种方式是不能使用的。方括号还可以用来强制 Visual Basic 接受其它类型库提供
34、的名称,这些名称与受到限制的关键字冲突。注意 因为键入方括号也是令人厌倦的事情,所以希望少用受到限制的关键字作窗体或控件名。但是,如果 Visual Basic 的新版本定义了与现有窗体或控件冲突的新关键字,那么,在为使用新版本而更新代码时,可以使用这个技巧。变量在 Visual Basic 中执行应用程序期间,用变量临时存储数值。变量有名字用来引用变量所包含的值的词和数据类型确定变量能够存储的数据的种类。可以把变量看作内存中存放未知值的所在处。例如,假定正在为水果铺编一个销售苹果的软件。在销售实际发生之前并不知道苹果的价格和销量。此时,可以设计两个变量来保存未知数 将它们命名为 AppleP
35、rice 和 ApplesSold。每次运行程序时,用户就这两个变量提供具体值。为了计算总的销售额,并且将结果显示在名叫 txtSales 的文本框中,代码应该是这样的:txtSales.txt = ApplePrice * ApplesSold每次根据用户提供的数值,这个表达式返回不同的金额。由于有了变量,就可以设计一个算式,而不必事先知道实际的输入是多少。在这个例子中,ApplePrice 的数据类型是货币,而 ApplesSold 的数据类型是整数。变量还可以表示许多其它数值,比方:文本数值、日期、各种数值类型,甚至对象也在此列。存储和检索变量中的数据用赋值语句进行计算,并将结果赋予变量
36、:ApplesSold = 10 '将值 10 '传给变量。ApplesSold = ApplesSold + 1 '变量值 &
37、#160; '增一。注意,例子中的等号是赋值符,并不是等于操作符;它将数值 (10) 赋予变量 (ApplesSold)。声明变量声明变量就是事先将变量通知程序。要用 Dim 语句声明变量,Dim 语句提供了变量名:Dim variablename As type在过程内部用 Dim 语句声明的变量,只有在该过程执行时才存在。过程一结束,该
38、变量的值也就消失了。此外,过程中的变量值对过程来说是局部的 也就是说,无法在一个过程中访问另一个过程中的变量。由于这些特点,在不同过程中就可使用相同的变量名,而不必担忧有什么冲突和意想不到变故。变量名: 必须以字母开头。不能包含嵌入的句号或者嵌入的类型声明字符。不得超过 255 个字符。在同一个范围内必须是唯一的。范围就是可以引用变量的变化域 一个过程、一个窗体等等。 由于 Dim 语句中的可选的 As type 子句,可以定义被声明变量的数据类型或对象类型。数据类型定义了变量所存储信息的类型。String、Integer 和 Currency 都是数据类型的例子。变量也可以包含来自 Visu
39、al Basic 或其它应用程序的对象。Object、Form1 和 TextBox 都是 Visual Basic 对象类型或类的实例。详细信息 关于对象的更详细的信息,请参阅“用对象编程和“用部件编程。在本章后面的“数据类型局部将详细讨论数据类型。声明变量的其它方式: 不在过程内部,而在窗体、标准或类模块的声明段声明变量,这将使变量对模块中的所有过程有效。用 Public 关键字声明变量,这将使变量在整个应用程序中有效。用 Static 关键字声明一个局部变量,那么,即使过程结束,变量的值也仍然保存着。 隐式声明在使用一个变量之前并不必先声明这个变量。 例如,可以书写这样一个函数,在其中就
40、不必在使用变量 TempVal 之前先声明它:Function SafeSqr (num) TempVal = Abs (num) SafeSqr = Sqr (TempVal)End FunctionVisual Basic 用这个名字自动创立一个变量,使用这个变量时,可以认为它就是显式声明的。虽然这种方法很方便,但是如果把变量名拼错了的话,会导致一个难以查找的错误。例如,假定写了这样一个函数:Function SafeSqr (num) TempVal = Abs (num) SafeSqr =
41、 Sqr (TemVal)End Function乍看起来,这两段代码好象是一样的。但是因为在倒数第二行把 TempVal 变量名写错了,所以函数总是返回 0。当 Visual Basic 遇到新名字,它分辨不出这是意味着隐式声明了一个新变量呢,还是仅仅把一个现有变量名写错了,于是只好用这个名字再创立一个新变量。显式声明为了防止写错变量名引起的麻烦,可以规定,只要遇到一个未经明确声明就当成变量的名字,Visual Basic 都发出错误警告。要显式声明变量,请 在类模块、窗体模块或标准模块的声明段中参加这个语句: Option Explicit或在“工具菜单中选取“选项,单击“编辑器选项卡,再
42、复选“要求变量声明选项。这样就在任何新模块中自动插入 Option Explicit 语句,但不会在已经建立起来的模块中自动插入;所以在工程内部,只能用手工方法向现有模块添加 Option Explicit。如果对包含 SafeSqr 函数的窗体或标准模块执行该语句,那么 Visual Basic 将认定 TempVal 和 TemVal 都是未经声明变量,并为两者都发出错误信息。随后就可以显式声明 TempVal。Function SafeSqr (num) Dim TempVal TempVal = Abs (num)
43、 SafeSqr = Sqr (TemVal)End Function因为 Visual Basic 对拼错了的 TemVal 显示错误信息,所以能够立刻明白是什么问题。由于 Option Explicit 语句有助于抓住这些类型的错误,所以最好在所有代码中使用它。注意 Option Explicit 语句的作用范围仅限于语句所在模块,所以,对每个需要 Visual Basic 强制显式变量声明的窗体模块、标准模块及类模块,必须将 Option Explicit 语句放在这些模块的声明段中。如果选择“要求变量声明,Visual Basic 会在后续的窗体模块、标准模块及类模块中自动插入 Opt
44、ion Explicit,但是不会将它参加到现有代码中。必须在工程中通过手工将 Option Explicit 语句加到任何现有模块中。理解变量的范围变量的范围确定了能够知晓该变量存在的那局部代码。在一个过程内部声明变量时,只有过程内部的代码才能访问或改变那个变量的值;它有一个范围,对该过程来说是局部的。但是,有时需要使用具有更大范围的变量,例如这样一个变量,其值对于同一模块内的所有过程都有效,甚至对于整个应用程序的所有过程都有效。Visual Basic 允许在声明变量时指定它的范围。指定变量的有效范围一个变量在划定范围时被看作是过程级局部变量,还是模块级变量,这取决于声明该变量时采用的方式
45、。范围 专用 公用 过程级 变量对于这种过程是专用的,在该过程中出现了这些变量。 不可使用。不能在一个过程中声明公用变量。 模块级 变量对于这种过程是专用的,在该过程中出现了这些变量。 变量可用于所有模块。 过程内部使用的变量过程级变量只有在声明它们的过程中才能被识别。也称它们为局部变量。用 Dim 或者 Static 关键字来声明它们。例如:Dim intTemp As Integer 或者 Static intPermanent As Integer在整个应用程序运行时,用 Static 声明的局部变量中的值一直存在,而用 Dim 声明的变量只在过程执行期间才存在。对任何临时计算来说,局部
46、变量是最正确选择。例如,可以建立十来个不同的过程,每个过程都包含称作 intTemp 的变量。只要每个 intTemp 都声明为局部变量,那么每个过程只识别它自己的 intTemp 版本。任何一个过程都能够改变它自己的局部的 intTemp 变量的值,而不会影响别的过程中的 intTemp 变量。模块内部使用的变量按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用。可在模块顶部的声明段用 Private 关键字声明模块级变量,从而建立模块级变量。例如:Private intTemp As Integer在模块级,Private 和 Dim 之间没有什么区别,但 Priv
47、ate 更好些,因为很容易把它和 Public 区别开来,使代码更容易理解。所有模块使用的变量为了使模块级的变量在其它模块中也有效,用 Public 关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明段来声明公用变量。例如:Public intTemp As Integer注意 不能在过程中声明公用变量,只能在模块的声明段中声明公用变量。详细信息 有关变量的其它信息,请参阅 “高级变量主题。高级变量主题使用多个同名的变量如果不同模块中的公用变量使用同一名字,那么通过同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在 Form1 和 M
48、odule1 中都声明了的公用 Integer 变量 intX,那么把它们作为 MX 和 FX 来引用便得到正确值。为了看清这是如何工作的,在一个新工程中插入两个标准模块,并在窗体上画上三个命令按钮。在第一个标准模块 Module1 之中声明一个变量 intX。Test 过程设置它的值:Public intX As Integer '声明 Module1 的 intX。Sub Test () '设置 Module1 的 intX 变量的值。
49、; intX = 1 End Sub在第二个标准模块 Module2 中声明了第二个变量 intX,它有相同的名字。又是名为 Test 的过程设置它的值:Public intX As Integer '声明了 Module2 的 intX。Sub Test () '设置 Module2 的 intX 变量的值。 intX = 2 End Sub在窗体模块中声明了第三个变量 intX。名为 Test 的过
50、程又一次设置它的值。Public intX As Integer '声明了该窗体的 intX 变量。Sub Test () ' 设置 form 中的 intX 变量值。 intX = 3End Sub在三个命令按钮的 Click 事件过程中,每一个都调用了相应的 Test 过程,并用 MsgBox 来显示这三个变量的值。Private Sub Command1_Click () Module1.Test
51、 ' 调用 Module1 中的 Test。 MsgBox MX ' 显示 Module1 的 intX。End SubPrivate Sub Command2_Click () Module2.Test
52、 ' 调用 Module2 中的 Test。 MsgBox MX ' 显示 Module2 的 intX。End SubPrivate Sub Command3_Click () Test
53、160; ' 调用 Form1 中的 Test。 MsgBox intX ' 显示 Form1 的 intX。End Sub运行应用程序,单击三个命令按钮中的每一个按钮。于是将看到三个公用变量被分别引用。注意在第三个命令按钮的 Click 事件过程中,在调用 Form1 的 Test 过程时不必指定 For
54、m1.Test,在调用 Form1 的 Integer 变量的值时也不必指定 FX 。如果多个过程或变量同名,那么 Visual Basic 会取变化更受限制的值,在这个例子中,就是 Form1 变量。公用变量与局部变量的比拟在不同的范围内也可有同名的变量。例如,可有名为 Temp 的公用变量,然后在过程中声明名为 Temp 的局部变量。在过程内通过引用名字 Temp 来访问局部变量;而在过程外那么通过引用名字 Temp 来访问公用变量。通过用模块名限定模块级变量就可在过程内访问这样的变量。Public Temp As IntegerSub Test ()
55、; Dim Temp As Integer Temp = 2 ' Temp 的值为 2。 MsgBox Form1.Temp ' Form1.Temp 的值为 1。End SubPrivate Sub Form_Load ()
56、 Temp = 1 ' 将 Form1.Temp 的值设置成 1。End Sub Private Sub Command1_Click () Test End Sub一般说来,当变量名称相同而范围不同时,局限性大的变量总会用“阴影遮住局限性不太大的变量即优先访问局限性大的变量。所以,如果还有名为 Temp
57、 的过程级变量,那么它会用“阴影遮住模块内部的公用变量 Temp。阴影窗体属性和控件由于阴影效应,窗体属性、控件、常数和过程皆被视为窗体模块中的模块级变量。窗体属性或控件的名称与模块级变量、常数、自定义类型或过程的名称相同是不合法的,因为它们的范围相同。在窗体模块内,和窗体中控件同名的局部变量将遮住同名控件。因此必须引用窗体名称或 Me 关键字来限定控件,才能设置或者得到该控件的值或它的属性值。例如:Private Sub Form_Click ()Dim Text 1 , BackColor'假定该窗体有一个控件也叫做 Text1。 Text1 = "
58、;Variable" '变量用“阴影遮住控件。 Me.Text1 = "Control" '要得到控件,必须用Me限定。 Text1.Top = 0 '导致出错! Me.Text1.Top = 0
59、160; '要得到控件,必须用Me限定。 BackColor = 0 '变量用“阴影遮住属性。 Me.BackColor = 0 '要得到窗体属性,必须用Me限定。End Sub使用同名的变量和过程专用模块级变量和公共模块级变量的名字也会和过程名冲突。模块中的变量不能和任何过程同名,也不能
60、和模块中定义的类型同名。但可以和公用过程或其它模块中定义的类型或变量同名。在这种情况下,从别的模块访问这个变量时,就必须用模块名来限定。虽然上面讨论阴影规那么并不复杂,但是用阴影的方法可能会带来麻烦,而且会导致难以查找的错误。因此,对不同的变量使用不同的名称才是一种好的编程习惯。在窗体模块中应尽量使变量名和窗体中的控件名不一样。静态变量除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于 Dim 声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在
61、,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。但可将局部变量定义成静态的,从而保存变量的值。在过程内部用 Static 关键字声明一个或多个变量,其用法和 Dim 语句完全一样:Static Depth例如,下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加,以计算运营总值。Function RunningTotal (num) Static ApplesSold ApplesSold = ApplesSold + num RunningTotal =
62、ApplesSoldEnd Function如果用 Dim 而不用 Static 声明 ApplesSold,那么以前的累计值不会通过调用函数保存下来,函数只会简单地返回调用它的那个相同值。在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。声明所有的局部变量为静态变量为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:Static Function RunningTotal (nu
63、m)这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程常数经常会发现代码包含一些常数值,它们一次又一次地反复出现。还可发现,代码要用到很难记住的数字 而那些数字没有明确意义。在这些情况下,可用常数大幅度地改良代码的可读性和可维护性。常数是有意义的名字,取代永远不变的数值或字符串。尽管常数有点象变量,但不能象对变量那样修改常数,也不能对常数赋以新值。常数有两种来源: 内部的或系统定义的常数是应用程序和控件提供的。在
64、“对象浏览器中的 Visual Basic ( VB ) 、和 Visual Basic for applications ( VBA ) 对象库中列举了 Visual Basic 的常数。其它提供对象库的应用程序,如 Microsoft Excel 和 Microsoft Project,也提供了常数列表,这些常数可与应用程序的对象、方法和属性一起使用。在每个 ActiveX 控件的对象库中也定义了常数 关于使用“对象浏览器的详细信息,请参阅“用对象编程。符号的或用户定义的常数是用 Const 语句来声明的。下节“创立属于自己的常数中将说明用户定义的常数。 在 Visual Basic 中,
65、常数名采用大小写混合的格式,其前缀表示定义常数的对象库名。来自 Visual Basic 和 Visual Basic for applications 对象库的常数以 "vb" 开头 例如vbTileHorizontal。设计前缀时应尽力防止发生意外冲突,不能出现常数名称相同但表示不同数值的情况。即使使用了前缀,两个对象库也仍可能包含表示不同值的相同常数。在这种情况下,引用哪个常数取决于哪个对象库具有更高的优先级。关于改变对象库优先级的信息,请参阅 “引用对话框局部。为了绝对确保不发生常数名字冲突,可用以下语法来限定对常数的引用:libname.modulename.co
66、nstnameLibname 通常是控件或库的类名。Modulename 是定义常数的模块的名字。Constname 是常数名。在对象库中定义了每个元素,并能在“对象浏览器中查看元素。创立属于自己的常数声明常数的语法是:Public|Private Const constantnameAs type = expression参数 constantname 是有效的符号名其规那么与建立变量名的规那么一样,expression 由数值常数或字符串常数以及运算符组成;但在 expression 中不能使用函数调用。Const 语句可以表示数量或 Date / Time 量:Const conPi = 3.14159265358979Public Const conMaxPlanets As Integer = 9Const conReleaseDate = #1/1/95#也可用 Const 语句定义字符串常数:Public Const conVersion = "07.10.A"Const conCodeName =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仲夏促销活动策划方案
- 仿生青蛙活动方案
- 企业万圣节活动方案
- 企业人才周活动方案
- 企业全年活动方案
- 企业冰壶团建活动方案
- 企业十周年庆活动方案
- 企业咨询服务公司策划方案
- 企业基金会募捐活动方案
- 企业宣传前期活动方案
- 2025年湖北汉江国有资本投资集团有限公司招聘笔试参考题库含答案解析
- 2025至2030年中国海参市场分析及竞争策略研究报告
- 《燕麦中的生物素:对头发、皮肤和指甲健康的潜在益处》论文
- 北京2025年首都医科大学事业编制岗位招聘26人笔试历年参考题库附带答案详解-1
- 2024年湖南高中学业水平合格性考试政治试卷真题(含答案详解)
- DB33-T 1402-2024 公务用车服务规范
- 人教版七年级数学上册练习题
- 《高效客户关系管理培训课件》
- 替尔泊肽在肥胖人群中的应用
- 医疗行业项目进驻流程解析
- 医疗信息保密制度
评论
0/150
提交评论