第2章 Visual Basic编程基础.docx
《第2章 Visual Basic编程基础.docx》由会员分享,可在线阅读,更多相关《第2章 Visual Basic编程基础.docx(41页珍藏版)》请在冰豆网上搜索。
第2章VisualBasic编程基础
第2章VisualBasic编程基础
利用窗体和控件设置了用户应用界面后,还需要编写程序代码,才能执行对象事件及方法。
VisualBasic是在BASIC语言基础上发展起来的,它保留了原来BASIC版本中的数据类型和语法,对其中的某些语句和函数的功能做了修改或扩充,并根据语言的可视化要求增加了一些新的功能。
第1节数据类型
描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序加工处理的符号的集合称为数据。
数据是计算机程序处理的对象,也是运算产生的结果,所以我们首先应该掌握VisualBasic能处理哪些数据,掌握各种形式数据的表达方法。
为了更好地处理各种各样的数据,VisualBasic提供了系统定义的数据类型,并允许用户根据需要定义自己的数据类型。
VisualBasic6.0提供的基本数据类型有字符串型数据和数值型数据,此外还提供了字节、日期、布尔、货币、对象和变体数据类型。
1.字符串型数据
字符串(String)型数据是指一切可打印的字符和字符串,它是用双引号括起来的若干个字符。
例如:
"Hello"
"Wearestudent"
"中国的长城太伟大了!
"
""(空字符串)
VisualBasic有两种类型的字符串,变长字符串和定长字符串。
变长字符串是指字符的长度是不固定的,随着对字符串变量赋予新的字符串,它的长度可随时变化。
如果没有说明一个字符是哪种类型,缺省为变长字符串。
定长字符串是指它在程序执行过程中,始终保持其长度不变的字符串。
例如,可规定学生学号的长度为8位,如果不足8位则用空格将不足的部分填满(现实中是在前面补零),如果长度超过8位则截去超出部分的字符。
2.数值型数据
数学运算中的数据可分为整数和小数。
VisualBasic的数值(Numeric)型数据主要可分为整型和浮点型(实型),另外还有货币型和字节型。
其中整型又可分为整型和长整型,浮点型可分为单精度和双精度浮点型。
(1)整型数(Integer):
整型数是没有小数点和指数符号的数,在内存中占2个字节(16位),其取值范围为-32768~32767。
例如,1,2,100,-5007等都是整型数。
(2)长整型数(Long):
长整型数的数字组成与整型数相同,只是在内存中要占4个字节(32位),其取值范围为-2147483648~2147483647。
(3)单精度浮点型数(Single):
浮点数也称为实型或实数,是带小数部分的数值。
单精度浮点数以4个字节(32位)存储,可表示最多7位有效数字数。
单精度数可用定点形式和浮点形式来表示。
定点形式就是我们在数学中常用的小数形式。
例如:
5.347,-0.125等。
浮点形式是用科学计数法,即以10的整数次幂表示数,以“E”(或“e”)来表示底数10。
例如,1.25E+11(即1.25×1011),-6.2578E6(即-6.2578×106),2.1234E-15(即2.1235×10-15)等。
单精度数的负数取值范围为-3.402823E+38~-1.401298E-45,正数的取值范围为1.401298E-45~3.402823E+38。
(4)双精度浮点型数(Double):
用8个字节(64位)存储,可表示最多15位有效数字的数。
双精度数也有定点和浮点两种形式,其浮点形式中是用“D”(或“d”)来代表指数的底数,例如,1.25D+11,-6.2578D51,2.1234D-28等。
双精度数的负数取值范围为-1.79769313486232D+308~-4.94065645841247D-324,正数的取值范围为4.94065645841247D-324~1.79769313486232D+308。
(5)货币型(Currency):
是为表示钱而设置的。
该类型数据以8个字节(64位)存储,精确到小数点后4位,小数点前最多可有15位,取值范围为-922337203685477.5808~922337203685477.5807。
浮点数中小数点是“浮动”的,即小数点可以出现在数的任何位置,而货币型数据的小数点是固定的。
(6)字节型(Byte):
表示无符号的整数,范围为0~255。
除一元减法外,所有可对整数进行操作的运算符均可操作字节数据类型。
3.其他类型数据
除了字符串和数值数据外,在VisualBasic中还可以使用其他数据类型,包括:
(1)布尔(Boolean)型数据:
布尔型数据是一个逻辑值,用两个字节存储,它有两种取值,即True(真)或False(假)。
任何只有两种状态的数据,如“True/False”、“Yes/No”、“On/Off”等,都可以表示为布尔型。
当把数值型数转换为布尔型时,0会转换为False,其他非0值转换为True。
当把布尔值转换为数值型时,False转换为0,True转换为1。
(2)日期(Date)型数据:
日期型数据用来表示日期和时间,可以表示多种格式的日期和时间。
日期型数据用两个“#”符号把表示日期和时间的值括起来,就像字符串数据用双引号括起来一样。
例如,#10/28/2001#、#10-28-2001#、#10/28/200110:
46:
01pm#等。
日期型数据在内存中占8个字节(64位),可以表示日期的范围从公元100年1月1日至9999年12月31日。
(3)对象(Object)型数据:
对象型数据可用来表示应用程序中或某些其他应用程序中的对象,用4个字节存储。
(4)变体(Variant)型数据:
变体型数据是一种可变的数据类型,可以表示任何值,包括数值、字符串、日期等。
变体型数据表示数值型数据时,占用16个字节的存储空间,最大可达Double类型的取值范围。
表示字符串时,则占用的存储空间等于字符串的长度。
第2节常量与变量
在程序中,不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。
在程序执行过程中,常量的值不发生变化,而变量的值是可变的,它代表内存中指定的存储单元。
2.2.1常量
常量是指在程序运行过程中始终保持不变的常数、字符串等。
在VisualBasic中,有两种形式的常量:
直接常量和符号常量。
直接常量就是在程序代码中,以直接明显的形式给出的数据。
如果在程序中多次出现一些很大的数字或很长的字符串,为了改进代码的可读性和可维护性,应该使用符号常量,即给某一特定的值赋予一个名字,以后用到这个值时就用名字代表,这样便于程序修改和阅读,就好像数学中用“π”来代表“3.14…”一样。
1.直接常量
根据使用的数据类型,常量分为:
字符串常量、数值常量、布尔常量、日期常量等。
字符串常量由字符组成,可以是除双引号和回车符之外的任何ASCII字符,如,“AB”、“101”。
其长度不能超过65535个字节(定长字符串)或20亿个字符(变长字符串)。
数值常量就是常数,共有5种类型:
整数、长整数、定点数、浮点数和字节数。
整数可由3种形式表示:
(1)十进制整数:
只能包含数字0~9、正负号(正号可以省略),例如:
7,0,-35。
(2)十六进制整数:
由数字0~9、A~F或a~f组成,并以&H引导,其取值范围为&H0~&HFFFF。
例如,&H256,&H8FAA等。
(3)八进制整数:
由数字0~7组成,并以&O或&引导,其取值范围为&O0至&O1777777。
例如,&O23,&O7234等。
长整数也具有以上3种表示形式。
VisualBasic在判断常量类型时有时存在多义性,如数值3.01,既可能是单精度类型,也可能是双精度类型或货币类型。
在缺省情况下,VisualBasic将选择需要内存容量最小的表示方法,从而3.01通常作为单精度数处理。
为了显式地指明常数的类型,可以在常数后面加上类型说明符,这些说明符分别为:
%整型
&长整型
!
单精度浮点数
#双精度浮点数
@货币型
$字符串型
例如,可用“78&”表示长整型,“23.456#”表示双精度浮点数。
2.符号常量
在VisualBasic中,可以定义符号常量,用来代替数值或字符串。
一般格式为:
Const常量名=表达式[,常量名=表达式…]
其中“常量名”是一个名字,按变量的构成规则命名,可加类型说明符。
“表达式”由直接常量、算术运算符、逻辑运算符组成。
例如:
ConstPI=3.14
在使用符号常量时,应注意以下几点:
(1)在声明符号常量时,可以在常量名后面加上类型说明符,例如:
ConstPI&=3.1415926
ConstPI#=3.1415926
前者声明为长整型常量,需要4个字节;后者声明为双精度常量,需要8个字节。
如果不使用类型说明符,则根据表达式的求值结果确定常量类型。
字符串表达式总是产生字符串常数,对于数值表达式,则按最简单(即占字节数最少)的类型来表示这个常数。
例如,如果表达式的值为整数,则该常数作为整型常量处理。
(2)当在程序中引用符号常量时,通常省略类型说明符。
常量的类型取决于Const语句中表达式的类型。
(3)类型说明符不是符号常量的一部分。
2.2.2变量
在程序中处理数据时,对于输入的数据、参加运算的数据、运行结果等临时数据,通常将它暂时存储在计算机的内存中。
在VisualBasic中,可以用名字表示内存位置,这样就能访问内存中的数据。
一个有名称的内存位置称为变量(Variable)。
和其他语言一样,VisualBasic也用变量存储数据值。
每个变量都有一个名字和相应的数据类型,通过名字来引用一个变量。
数据类型决定了该变量的存储方式。
在程序执行的每个瞬间,变量的值都是确定的、已知的,但在程序执行的整个过程中它的值是可以变化的。
可以形象地理解为,每个变量为一个盒子,盒子有一个名字,盒子中存放的东西就是数据。
一个变量在一个时刻只能存放一个值,如果某一个变量在程序运行中数据发生变化,则现行值将取代原来的数据。
例如将整数8放到变量x中,则原来的数被清除,现行值8就成为变量x的值。
1.变量的命名规则
变量代表在程序执行过程中其值可以改变的存储单元,这个存储单元的名字称为变量名。
VisualBasic变量名的命名规则为:
∙变量名只能由字母、数字和下划线组成。
∙变量名的第一个字符必须是字母。
∙组成变量名的字符数不得超过255个字符。
∙不能用VisualBasic的保留字当作变量名,但可以把保留字嵌入变量名。
例如变量Print是非法的,变量Print_Number是合法的。
例如,变量x,abx,Amd198,C_0等都是合法的,而变量8a,A+B,Filename等则是非法的。
在给变量命名时应注意以下几点:
(1)取名最好使用有明确实际意义、容易记忆以及通用的变量名,即要见名知义。
比如用sum代表求和、Student_Num代表学生学号等。
(2)尽可能简单明了,尽量不要使变量名太长,因为太长了不便于阅读和书写。
(3)变量名不能与过程名和符号常量名相同,更不能用VisualBasic的关键字做变量名。
(4)尽量采用VisualBasic建议的变量名前缀或后缀的约定来命名,以便区分变量的类型,如intMax,strName。
VisualBasic不区分变量名和其他名字中字母的大小写,例如,Hello,HELLO,hello指的是同一变量名。
也就是说,在定义一个变量后,只要字符相同,不管其大小写是否相同,指的都是同一个变量。
为了便于阅读,每个单词开头的字母一般用大写,即大小写混合使用组成变量(或其他名字),如PrintText。
此外,习惯上,符号常量一般用大写字母定义。
2.变量的声明
任何变量都属于一定的数据类型,包括基本数据类型和用户定义的数据类型。
声明变量就是用一个语句来定义变量的类型。
声明变量的语句并不把值分配给变量,而是告知变量将包含什么类型的数据。
变量声明的一般格式为:
Dim|Private|Static|Public<变量名>[As<类型>][,<变量名2>[As<类型2>]]…
这里的“<变量名>”应遵循标准的变量命名约定,“As”是关键字,“<类型>”用来定义被声明变量的数据类型或对象类型。
注:
为了便于对语句、函数等的解释说明,本书中采用一些常用的符号,如“<>”代表为必选项,“[]”代表可选项,“|”代表多选一,“…”代表同类项目的重复出现。
这些符号不是语句或函数的组成部分,在输入具体命令或函数时,不能将其输入到程序语句中。
Dim用于在标准模块(Module)、窗体模块(Form)或过程(Procedure)中定义变量或数组。
当用于窗体时,程序代码窗口中的“对象”框为“通用”,“过程”框应为“声明”。
例如:
DimCountAsInteger
DimSumAsDouble
用AsString可以定义变长字符串,也可以定义定长字符串。
变长字符串的长度取决于赋给它的字符串常量的长度,定长字符串的长度通过加上“*数值”来确定。
例如:
DimName1AsString
DimName2AsString*10
也可以用一个Dim定义多个变量,例如:
DimVar1AsString,Var2AsDouble
使用声明语句建立一个变量后,VisualBasic自动将数值类型的变量赋初值0,将字符或Variant类型的变量赋空串,将布尔型的变量赋False。
使用变量时,VisualBasic会自动转换变量值的类型,使变量的值与声明语句中的名字相匹配。
如对上面定义的Count变量赋予值1.5,则将会自动转换为整型数2(四舍五入)。
Public用来在标准模块中定义全局变量或数组,Static用于在过程中定义静态变量及数组,Private用来声明局部变量(有关内容,请参见第5章)。
与其他语言不同,VisualBasic不要求在使用变量前必须特别声明。
如果没有声明变量而直接使用,VisualBasic把它看作变体类型(Variant)。
然而,使用变体类型存储通用信息有两个缺点:
一个它会浪费内存空间,二是在与某些数据处理功能同时使用时变体类型可能无效。
所以,在使用变量前最好先声明变量,把将要用到的数据类型告诉程序。
2.2.3数组
在实际应用中,常常需要处理同一类型的成批数据。
例如,为了处理一个班学生的某门课程的考试成绩,可以用S1,S2,S3,S4,…,分别代表每个学生的分数,其中S1代表第一个学生的分数,S2代表第二个学生的分数……。
这里的S1,S2,S3,…,通常称为下标变量。
在VisualBasic中,把一组具有同一名字、不同下标的下标变量称为数组。
数据的一般格式为:
S(10)。
其中,S称为数组名,10是下标。
一个数组可以含有若干个下标变量(或称为数组元素),下标用来指定某个数组元素在数组中的位置,例如,S(10)代表S数组中的第10个元素。
在VisualBasic中,使用数组变量时需注意以下几点:
(1)数组的命名与简单变量的命名规则相同。
(2)下标必须用括号括起来,不能把数组元素S(10)写成S10,后者是简单变量。
(3)下标可以是常数、变量或表达式。
(4)下标必须是整数。
(5)下标的最大值和最小值分别称为数组的上界和下界。
数组元素在上、下界内是连续的。
1.数组的声明
数组应当先声明后使用。
在计算机中,数组占据一块内存区域。
数组名是这个区域的名称,区域的每个单元都有自己的地址,该地址用下标表示。
声明数组的目的就是通知计算机为其留出需要的空间。
在VisualBasic中,声明数组的格式与声明变量的格式基本一致,用不同关键字(Dim,Public,Private,ReDim)声明,其适用范围不同。
下面我们以Dim为例进行说明。
在声明数组时,VisualBasic提供了两种格式:
格式1:
Dim数组名(下标上界)As类型
格式2:
Dim数组名([下界To]上界)As类型
格式1与传统的数组声明格式相同,只给出下标的上界,即可以使用的下标的最大值。
例如:
DimS(40)AsInteger
定义了一个数组名为S,类型为Integer,占据40个(0~39)整型变量的空间数组变量。
格式2则可根据需要指定数组下标的下界,使其下标从指定的数开始,而不是一定从0开始。
例如:
DimSB(41To80)AsInteger
定义了一个数组,该数组的下标值在41~80之间,数组元素有SB(41)、SB(42)、…、SB(80),共40个。
2.多维数组
如果一个数组的元素只有一个下标,则称这个数组为一维数组,如数组S、SB都有40个元素。
一维数组中的各个元素又称为单下标变量。
如果这个班中的40名学生,每个学生又有离散数学、计算机组成原理、英语、政治经济学、程序设计等几门课程的成绩,如表2.1所示。
表2.1学生成绩
姓名
离散数学
计算机组成原理
英语
政治经济学
程序设计
王小平
81
78
90
68
89
李宁
68
75
91
87
75
赵媛媛
85
89
84
90
92
…
…
…
…
…
…
这些成绩可以用两个下标的数组来表示,如S(i,j)表示第i个学生的第j门课的成绩。
有两个下标的数组称为二维数组,其中的数组元素称为双下标变量。
二维数组的声明与一维数组的格式一样,例如:
DimS(3,4)AsInteger
数组S有3行4列,占据12(3×4)个整型变量空间,如图2.1所示。
图2.1二维数组
同样,也可以定义三维数组。
在VisualBasic中可以至多使用16维的数组。
2.2.4用户定义类型
如果在表2.1中添加几项,如学号、性别、出生年月等,如表2.2所示。
表2.2学生登记表
学号
姓名
性别
出生年月
离散数学
组成原理
英语
政治
程序设计
000102
王小平
男
1982年6月
81
78
90
68
89
000034
李宁
男
1983年3月
68
75
91
87
75
001056
赵媛媛
女
1982年10月
85
89
84
90
92
…
…
…
…
…
…
…
…
…
表中每列的数据类型相同,但每一行中却有着不同的数据类型。
显然不能用一个数组来存放这一组数据,因为数组中的每一个元素必须具有相同的数据类型。
为了解决这个问题,VisualBasic允许将基本数据类型按需要组合起来,创建自定义的数据类型,即用户定义类型(也称为记录类型)。
可以用Type语句创建用户定义类型,其格式为:
[Private|Public]Type<用户类型名>
用户类型元素As类型
[用户类型元素As类型
……]
EndType
其中,用户类型名是用户定义的数据类型名,而不是变量,其命名规则与变量名的命令规则相同。
用户类型元素可以是任何基本数据类型,也可以是用户定义数据类型,若为字符串,则必须是定长字符串。
例如,要建立一个学生成绩处理程序,由于每一位学生都需要学号、姓名等,则可以使用Type语句定义一个名称为Student的自定义类型:
PrivateTypestudent
numAsString*6
namAsString*6
sexAsBoolean
birAsDate
lsAsInteger
……
EndType
用户定义类型被创建后,可以用Dim,Redim,Static建立一个具有这种数据类型的变量。
例如定义一个具有Student类型的变量Stu:
DimStuAsstudent
如同数组名一样,变量Stu下含有若干个元素。
各个元素的表示形式为:
用户类型变量名.用户类型元素
例如,要存取用户定义类型变量Stu中nam元素的数据,要写为:
Stu.nam。
用户定义类型也可以作为数组元素的数据类型。
例如,定义一个拥有40个记录元素的数组Stud:
Dimstud(1To40)Asstudent
第3节表达式
运算是对数据进行加工的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。
表达式用来表示某个求值规则,它由运算符、常量、变量、函数、对象等组成。
例如,3+5、S+Sin(π)、30-56.7等都是表达式。
VisualBasic提供了丰富的运算符,可以构成多种表达式。
2.3.1算术表达式
算术表达式是最常用的表达式,也称为数值型表达式,由算术运算符、数值型常量、变量、函数及括号组成。
1.算术运算符
VisualBasic提供了7种算术运算符,如下所示:
+(加法运算,如3+5、a+b)
-(减法运算,如25-3、x-1;也称取负运算符,如-x、-3)
*(乘法运算,相当于数学中的“×”,如3*5、2*a)
/(浮点除法运算,相当于数学中的“÷”,如35/7、a/b)
^(乘方运算,也称指数运算,如(x+y)^2、x^a)
\(整数除法,如5\3、a\b)
Mod(求余的模运算,如14Mod3)
其中,加(+)、减(-)、乘(*)、浮点除(/)、取负(-)、乘方(^)运算的含义与数学中的基本相同。
只有取负(-)为单目运算,其他均为双目运算。
整数除法运算符(\)执行整除运算,结果为整型值。
如12\5的值为2,而不是2.4,这与浮点除法(数学中的除法)是不同的。
整数除法的操作数一般为整型值,当操作数带有小数时,首先四舍五入为整型或长整型数,然后进行整除运算。
其运算结果被截断为整型或长整型数,不进行四舍五入处理。
例如:
x=8\3
y=25.65\6.5
运算结果为:
a=2,b=3。
Mod用来求余数,其结果为每一个操作数整除第二个操作数所得的余数。
例如,如果用8整除5,余数为3,因此8Mod5的结果为3。
同理,14Mod3的结果为2。
在书写表达式时,应注意到和数学中表达式的区别:
(1)每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角写幂次方或右下角写下标。
例如,将x^2写成x2,x1+x2写成x1+x2。
(2)乘法运算符不能省略,例如,将2*x写成2x。
(3)所有括号都用小括号,没有大括号和中括号,例如,2*(3+2*(10-2))是正确的,而2*[3+2*(10-2)]是非法的。
2.算术运算符的优先级
如果一个表达式包含有多个运算符,VisualBasic的运算方式由其固定的规则来决定先后顺序。
下面是这7个运算符的优先顺序(由先往后,前面的运算符优先处理):
^;-(取负);*或/;\;Mod;+或-(减法)
其中乘法和浮点除法是同级运算符,加法和减法是同级运算符,同级运算自左向后进行。
如果表达式中含有括号,则先计算括号内表达式的值。
如果有多层括号,先计算最里层括号中的表达式。
例如:
5*3/2-20+(3+5\2)
在表达式求值时,先计算(3+5\2)的值,这里又要先计算5\2的值,其值为2,即括号内的值等于5。
再计算机5*3/2的值,为7.5。
最后计算7.5-20+5的值,得到整个表达式的值为-7.5。
2.3.2字符串表达式
一个字符串表达式由字符串常量、字符串变量、字符串函数和字符串运算符组成。
它可以是一个简单的字符串常量,也可以是若干个字符串常量或字符串变量的组合。
在Visua