1、第2章 Visual Basic 语言基础,第2章 Visual Basic 语言基础,VB使用BASIC语言为语言基础,并得到了较大的扩展,既可以通过语言流程结构控制程序,也可以轻松地处理VB的对象和控件。,2.1 标准数据类型为了更好地处理各种各样的数据,VB定义了多种数据类型,表2-1列出了VB中定义的全部标准数据类型。 表2-1 VB 6.0的标准数据类型,2.1.1 数值(Numeric)型数据VB有6种数值型的数据:整型、长整型、单精度浮点型、双精度浮点型、货币型和字节数据类型。 1. 常规整型数(Integer)常规整型数简称为整型数,表示不带小数点和指数符号的数,其内部存储空间
2、和范围如表2-1所示。 2. 长整型数(Long)长整型数的数字组成与整数相同,正号可以省略,并且在数值中不能出现逗号(分节符)。长整型数内部存储空间和范围如表2-1所示。,3. 单精度数(Single)单精度数的内部存储空间和范围如表2-1所示。可表示最多7位有效数字的数,小数点可以位于这些数字的任何位置,正号可以省略。单精度数可以用定点形式和浮点形式来表示。单精度数的定点形式是在该范围内含有小数的数。单精度数的浮点形式是用科学计数法,即以10的整数次幂表示的数,以“E”来表示底数10。 4. 双精度数(Double)双精度数的内部存储空间和范围如表2-1所示。可表示最多15位有效数字的数,
3、小数点可以位于这些数字的任何位置,正号可以省略。双精度数也有定点和浮点两种形式。,5. 货币型(Currency)货币型数的内部存储空间和范围如表2-1所示。Currency数据类型支持小数点右面4位和小数点左面15位,它是一个精确的定点数据类型,适用于货币计算。浮点(Single和Double)数比Currency的有效范围大得多,但有可能产生小的进位误差。 6. 字节型(Byte)Byte数表示无符号的整数,范围为0255。除一元减法外,所有可对整数进行操作的运算符均可操作Byte数据类型。因为Byte是从0255的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,VB首先将Byt
4、e转换为符号整数。,2.1.2 字符(String)型数据字符型数据是指一切可打印的字符和字符串,它是用双引号括起来的一串字符。一个西文字符占一个字节,一个汉字或全角字符占两个字节。字符串允许的最大长度见表2-1。在VB中有两种类型字符串:变长字符串和定长字符串。 1. 变长字符串可变长字符串是指字符串的长度是不固定的,随着对字符串变量赋予新的字符串,它的长度可增可减。按照缺省规定,一个字符串如没有定义成固定长的,都属于可变长字符串。,2.1.2 字符(String)型数据 2. 定长字符串固定长字符串是指它在程序执行过程中,始终保持其长度不变的字符串。如果赋予字符串的字符少于20个,则用空格
5、将不足部分填满。如果赋予字符串的长度超过20个,则截去超出部分的字符。,2.1.3 布尔(Boolean)型数据布尔型数据只有两个值:真(True)和假(False),经常被用来表示逻辑判断的结果。任何只有两种状态的数据,如True或False、Yes或No、On或Off等,都可以表示为布尔型。当把数值型数据转换为Boolean型时,0会转换为False,其他非0值转换为True。当把Boolean值转换为数值型时,False转换为0,True转换成1。,2.1.4 日期(Date)型数据Date型数据用来表示日期和时间,可以表示多种格式的日期和时间。Date型数据用两个“#”符号把表示日期和
6、时间的值括起来,就像字符串数据用双引号括起来一样。例如:#11/18/1999#,#1999-11-18#,#11/18/1999 10:28:56 pm#。如果输入的日期或时间是非法的或不存在的,系统将提示出错。,2.1.5 对象(Object)型数据Object型数据可用来表示应用程序中或某些其他应用程序中的对象。可以用Set语句指定一个被声明为Object的变量去引用应用程序所识别的任何实际对象。例如: Dim objDb As Object Set objDb = OpenDatabase(“c:Vb6Biblio.mdb“),2.1.6 可变(Variant)类型数据Variant类
7、型的数据能够表示所有系统定义类型的数据,当把它们赋予Variant型时,不必在这些数据的类型间进行转换,VB会自动完成任何必要的转换。要尽量少用Variant数据类型,以避免发生错误。如果对Variant变量进行数学运算,则Variant必包含某个数。如果连接两个字符串,则应该用“&”操作符,而不要用“+”操作符。,2.2 变量变量就是命名的内存单元位置,一旦定义了某个变量,该变量表示的都将是同一个内存位置,程序员使用变量名,就可在程序的其他部分引用该内存位置,直到释放该变量。变量有两个特性:名字和数据类型。变量的名字用于在程序中标识变量和使用变量的值,数据类型则确定变量中能保存哪种数据。,2
8、.2 变量 2.2.1 变量的命名规则变量名可以是任何有效的标示符,但不能是关键字(VB的关键字是指VB中系统已经定义的词,如命令语句、内部函数、运算符名等),并且必须以字母开头,如:sum,a2,不能是2a。变量名的最大长度是255个字符,只能含字母、数字和下划线。VB是不区分大小写的,所以认为a1和A1是相同的。关键字也是不区分大小写的,VB自动地设置关键字的第一个字母为大写,因此输入的dim将转变为Dim。,Microsoft推荐的变量命名规则为:变量名以小写字母开头,第一个单词后面的每个单词都以大写字母开头,其它字母小写,以保证对变量名能够进行正确的断句。例如:userTable、na
9、me、dateHired等。在为变量命名时还应注意:1) 尽可能简单明了,尽量不要使变量名太长,因为太长了不便于阅读和书写。2) 变量名不能与过程名和符号常量名相同。3) 变量名在同一个范围内必须是惟一的。,2.2.2 变量的声明与其他语言不同,VB不要求在使用变量前特别声明。如果没有声明变量,VB使用称为“可变类型(Variant)”的缺省数据类型。然而,使用可变类型存储通用信息有两个缺点:一是它会浪费内存空间,二是在与某些数据处理功能同时使用时可变类型可能无效。所以,在使用变量前最好先声明变量,把将要用到的数据类型告诉程序。 1. 声明变量所谓声明变量,就是用一个语句来定义变量的类型,又称
10、为显式声明。声明变量的语句并不把值分配给变量,而是告知变量将会包含的数据。声明语句的语法为Dim | Private | Static | Public变量名As 类型,变量名2As 类型2 ,使用声明语句建立一个变量后,VB自动将数值类型的变量赋初值0,将字符或Variant类型的变量赋空串,将布尔型的变量赋False。使用变量时,VB会自动转换变量值的类型,使变量的值与声明语句中的名字相匹配。例如,声明变量为:Dim count As Integer当为该变量赋值时:count = 1.5 数1.5为单精度浮点型Single 变量count会自动将1.5转换为整型数(Integer)2(四
11、舍五入)。,2. 强制显式声明变量语句Option Explicit声明变量可以有效地降低错误率。为了避免写错变量名引起的麻烦,可以规定在使用变量前,必须先用声明语句进行声明,否则VB将发出警告“Variable not defined”(变量未定义)。要强制显式声明变量,可以在类模块、窗体模块或标准模块的声明段中加入语句:Option Explicit或从“工具”菜单中执行“选项”命令,在打开的“选项”对话框中单击“编辑器”选项卡,再复选“要求变量声明”选项。,2. 强制显式声明变量语句Option ExplicitOption Explicit语句的作用范围仅限于语句所在模块,所以,对每个
12、需要强制显式变量声明的窗体模块、标准模块及类模块,必须将Option Explicit语句放在这些模块的声明段中。如果选择“要求变量声明”,VB会在后续的窗体模块、标准模块及类模块中自动插入Option Explicit,这一语句总是显示在代码编辑窗口的顶部。,2.3 常量常量是指在程序运行过程中始终保持不变的常数、字符串等。在VB中,有两种形式的常量:直接常量和符号常量。直接常量就是在程序代码中,以直接明显的形式给出的数据。符号常量有点像变量,但不能修改,也不能对符号常量赋以新值。,2.3.1 直接常量根据使用的数据类型,常量分为:字符串常量、数值常量、布尔常量、日期常量。 1. 字符串常量
13、字符串常量就是用双引号括起来的一串字符。这些字符可以是除双引号“”和回车、换行符以外的所有字符,例如:“A“,“123“。如果一个字符串仅有双引号(即双引号中无任何字符,也不含空格),则称该字符串为空串,即“。 2. 数值常量数值常量就是常数,共有5种数值类型:整数、长整数、定点数、浮点数和字节数。,2.3.1 直接常量根据使用的数据类型,常量分为:字符串常量、数值常量、布尔常量、日期常量。 3. 布尔常量布尔常量只有True(真)和False(假)两个值。 4. 日期常量用两个“#”符号把表示日期和时间的值括起来表示日期常量。例如:#06/20/2000#。,2.3.2 符号常量符号常量又分
14、为两种:内部(系统定义)常量和符号(用户定义)常量。,图2-3 “对象浏览器”窗口 1. 系统内部定义的常量内部或系统定义的常量是VB和控件提供的。这些常量可与应用程序的对象、方法和属性一起使用,在代码中可以直接使用它们。可以在“对象浏览器”中的查看内部常量。,2. 用户定义的符号常量(1) 符号常量的声明尽管VB内部定义了大量的常量,但是有时程序员还是需要创建自己的符号常量。用户定义常量使用Const语句来给常量分配名字、值和类型。声明常量的语法为: Public | Private Const 常量名 As 数据类型 =表达式等号“=”右边的表达式往往是数字或字符串,但也可以是其结果为数或
15、字符串的表达式(尽管表达式不能包含函数调用)。甚至可用先前定义过的常量定义新常量。Const pi2 = pi * 2常量一经定义,就可将其放置在代码中,使代码更可读。例如:Static solarSystem (1 To maxPlanets)If people worldPop Then Exit Sub,(2) 符号常量的使用规则与变量声明一样,Const语句也有范围,也使用相同的规则:1) 为创建仅存在于过程中的常量,应在该过程内部声明常量。如Const a=20。2) 为使常量对模块中所有过程都有效,但对模块之外任何代码都无效,应在模块的声明段中声明常量。如Private Const
16、 a=20。3) 为创建在整个应用程序中有效的常量,应在标准模块声明段中进行声明,并在Const前放置Public关键字。如Public Const a=20。在窗体模块或类模块中不能声明Public常量。,由于常量可以用其他常量定义,因此在两个以上常量之间不要出现循环或循环引用。当程序中有两个以上的公用常量,而且每个公用常量都用另一个去定义时就会出现循环。例如:在Module1中:Public Const a = b * 2 在整个应用程序中有效在Module2:Public Const b = a / 2 在整个应用程序中有效如果出现循环,在试图运行此应用程序时,VB就会产生错误信息,不解
17、决循环引用就不能运行程序。为避免出现循环,可将公共常量限制在单一模块内,或最多只存在于少数几个模块内。,2.4 表达式表达式可用来执行运算、操作字符或测试数据,每个表达式都产生惟一的值。表达式的类型由运算符的类型决定。在VB中有5类运算符和表达式:算术运算符和算术表达式、字符串运算符和字符串表达式、日期运算符和日期表达式、关系运算符和关系表达式、布尔运算符和布尔表达式。本章先介绍前3类,关系运算符和关系表达式、布尔运算符和布尔表达式将在第4章中作详细介绍。 2.4.1 算术表达式算术表达式也称数值型表达式,由算术运算符、数值型常量、变量、函数和圆括号组成,其运算结果为一数值。算术表达式的格式为
18、: 数值1算术运算符1数值2算术运算符2数值3,1. 算术运算符VB有7个算术运算符,见表2-2。在这7个算术运算符中,只有取负“”是单目运算符,其他均为双目运算符。加(+)、减()、乘(*)、浮点除法(/)、取负()、乘方()运算的含义与数学中基本相同。 表2-2 算术运算符进行除法(包括整除)运算时除数为0或进行乘幂运算时指数为负数而底数为0时,都会产生算术溢出的错误信息。,2. 表达式的书写规则算术表达式与数学中的表达式写法有所区别,在书写表达式时应当特别注意:1) 每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:23要写成23,x1+x
19、2要写成x1+x2。2) 原来在数学表达式中省略的内容必须重新写上。例如:2x要写成2 * x。3) 所有括号都用小括号( ),括号必须配对。例如:3x+2(y+z)必须写成3 *(x+2*(y+z)。4) 要把数学表达式中的有些符号,改成VB中可以表示的符号。例如:要把2r改为2*pi*r。,3. 算术运算符的优先级表2-3按优先顺序由高到低列出了算术运算符。 表2-3 运算符的优先顺序其中乘和浮点除是同级运算符,加和减是同级运算符。当一个表达式中含有多种算术运算符时,将按上述顺序求值。如果表达式中含有括号“( )”,则先计算括号内表达式的值。,2.4.2 字符串表达式一个字符串表达式由字符
20、串常量、字符串变量、字符串函数和字符串运算符组成。VB只有一种字符串运算符,即连接运算符“&”,该运算符用于连接两个或更多的字符串。字符串表达式的格式为:字符串1&字符串2&字符串3当两个字符串用连接运算符连接起来后,第2个字符串直接添加到第1个字符串的尾部,结果是一个更长的、包含两个源字符串的全部内容的字符串。如果要把多个字符串连接起来,每两个字符串之间都要用“&”号分隔。例如:“ABC123“ & “666xyz“ 连接后结果为:“ABC123666xyz“计算机“ & “世界“ 连接后结果为:“计算机世界“123 45“ & “abcd “ & “ xyz “ 连接后结果为:“123 4
21、5abcd xyz “,除用“&”把两个表达式强制连接成一个字符串外,还可以用“+”把两个字符串连接成一个字符串。为了避免与算术加法运算符产生混淆,应该用“&”号。另外,“&”会自动将非字符串类型的数据转换成字符串后再进行连接,而“+”则不能自动转换。,2.4.3 日期表达式日期型表达式由算术运算符“+、”、算术表达式、日期型常量、日期型变量和函数组成。日期型数据是一种特殊的数值型数据,它们之间只能进行加“+”、减“”运算。有下面3种情况:1) 两个日期型数据可以相减,结果是一个数值型数据(两个日期相差的天数)。例如:#12/19/1999# #11/16/1999# 结果为数值型数据:332
22、) 一个表示天数的数值型数据可加到日期型数据中,其结果仍然为一日期型数据(向后推算日期)。例如:#11/16/1999# + 33 结果为日期型数据:#1999-12-19#3) 可从日期型数据中减掉表示天数的数值型数据,其结果仍然为一日期型数据(向前推算日期)。例如:#12/19/1999# 33 结果为日期型数据:#1999-11-16#,2.5 常用内部函数在VB中,有两类函数:内部函数和用户定义函数。用户定义函数是由用户自己根据需要定义的函数。内部函数也称标准函数,VB提供了大量的内部函数。在这些函数中,有些是通用的,有些则与某种操作有关。这些函数可分为:转换函数、数学函数、字符串函数
23、、日期时间函数、随机函数。下面列出一些常用的内部函数,其具体用法和示例请读者查阅联机帮助MSDN Library Visual Studio 6.0(CHS)。,2.5.1 数学运算函数数学运算函数用于各种数学运算。常用数学运算函数见表2-4。 2.5.2 字符串函数VB提供了大量的字符串函数,具有强大的字符串处理能力,见表2-5。 2.5.3 日期和时间函数时间和日期函数使程序能向用户显示日期和时间,提供某个事件何时发生及持续时间长短的信息。时间和日期函数见表2-6。,2.5.4 格式输出函数用格式输出函数Format()可以使数值、日期或字符型数据按指定的格式输出。Format函数的语法格
24、式为:Format(表达式,格式字符串)说明:1) 表达式可以是数值型、日期型或字符型的表达式。2) 格式字符串是一个字符串常量或变量,由专门的格式说明字符组成。这些说明字符决定了数据项表达式的显示格式和长度。,2.5.4 格式输出函数3) 当格式字符串是字符串常量的时候,必须放在双引号中。4) 格式输出函数Format()返回一个Variant类型的值。格式说明字符按照类型可以分为数值型、日期型和字符型,见表2-7、表2-8、表2-9。,2.5.5 随机数语句和函数在测试、模拟和游戏程序中,经常要使用随机数,随机数语句和函数如表2-10所示。 2.5.6 数据类型转换函数在VB中,一些数据类
25、型可以自动转换,例如数字字符串可以自动转换为数值型,但是,多数类型不能自动转换,这就需要用类型转换函数来显式地说明。转换函数如表2-11所示。每个类型转换函数都可以强制将一个表达式转换成某种特定数据类型。例如:Area = CDbl(txtLength.Text * txtWidth.Text),注意:如果传递给函数的参数超过转换目标数据类型的范围,将发生错误。例如,如果想把Long型数转换成Integer型数,那么,Long型数必须在Integer数据类型的有效范围之内。一般不必了解VB为特殊变量使用哪一种变量类型,若想了解VB正在使用哪种变量类型,可使用VarType函数。,2.6 程序语
26、句VB程序中的一行代码称为一条程序语句,简称为语句。 2.6.1 语句语句是执行具体操作的指令,每个语句行以回车(Enter)键结束。一个语句行的长度最多不能超过1023个字符。一个完整的程序语句可以简单到只有一个关键字,例如:Beep语句也可是各种元素的组合,如下面语句,把当前系统时间赋值给标签的Caption属性:Label1.Caption = Time对象名 属性名 VB函数赋值号,2.6.2 语句的书写规则在编写程序代码时要遵循一定的规则,这样写出的程序既能被VB正确地识别,又能增加程序的可读性。缺省情况下,在输入语句的过程中,VB将自动对输入的内容进行语法检查,如果发现语法错误,将
27、弹出一个信息框提示出错的原因。VB还会按约定对语句进行简单的格式化处理,例如关键字、函数的第1个字母自动变为大写。 1. 一行中的多条语句一般情况下,输入程序时要求一行写一个语句。但是也可以使用复合语句行,即把几个语句放在一个语句行中,语句之间用冒号“:”隔开。,2.6.2 语句的书写规则 2. 语句的续行当一条语句很长时,在代码编辑窗口阅读程序时将不便查看,使用滚动条又比较麻烦。这时,就可以使用续行功能,用续行符“_”将一个较长的语句分为多个程序行。在使用续行符时,在它前面至少要加一个空格,并且续行符只能出现在行尾。,2.6.4 基本语句 1. 赋值语句Let在前面的例子中,已经在代码中使用
28、了一个最基本的命令语句:赋值语句。赋值语句可以将指定的值赋给某个变量或对象的某个属性,例如代码:Label1.Caption = “运行时改变标签的标题“赋值语句的一般格式为:Let 名称=表达式,【例2-1】交换两个变量中的数据,如图2-5所示。图2-5 交换两个变量中的数据图2-6 建立界面与设置属性,分析:将两个不同的变量设想为两个瓶子A、B,其中分别装有不同颜色的液体,要交换瓶子中的液体。可这样来做:另取一个瓶子C,先将瓶A中的液体倒入瓶C中,再将瓶B中的液体倒入A中,最后将瓶C中的液体倒入B中即可。编写命令按钮Command1的Click事件代码:Private Sub Comman
29、d1_Click()t = Label3.CaptionLabel3.Caption = Label4.CaptionLabel4.Caption = tEnd Sub,2. 卸载对象语句Unload当要结束应用程序而从内存中卸载窗体或要从内存中卸载某些控件时,可以使用Unload语句。Unload语句的语法格式为:Unload 对象名,图2-7 关闭程序窗体 【例2-2】在例2-1中使用命令关闭程序窗体,如图2-7所示。只需在上例中增加一个命令按钮Command2(关闭),并且编写Command2的Click事件代码:Private Sub Command2_Click()Unload Me
30、End Sub说明:其中的Me表示按钮所在的窗体对象。,3. 结束程序语句End在早期的Basic语言中使用End语句来结束一个程序的执行。其语法格式为:End说明:1) End语句不调用Unload、QueryUnload事件或任何其他Visual Basic代码,只是生硬地终止代码执行。窗体和类模块中的Unload、QueryUnload事件代码未被执行。2) End语句提供了一种强迫中止程序的方法。只要没有其他程序引用该程序公共类模块创建的对象并无代码执行,程序将立即关闭。3) VB程序正常结束应该卸载所有的窗体。,4. 注释语句为了提高程序的可读性,通常应在程序的适当位置加上一些注释。注释语句用来在程序中包含注释,语法格式为:Rem 注释内容 或 注释内容例如:s = pi * r 2 计算圆的面积v = 4 / 3 * pi * r 3 : Rem 计算球的体积,5. 暂停语句Stop语句用来暂停程序的执行,使用Stop语句,就相当于在程序代码中设置断点。其语法格式为:Stop,