第三章Visual Basic语言基础.docx
《第三章Visual Basic语言基础.docx》由会员分享,可在线阅读,更多相关《第三章Visual Basic语言基础.docx(53页珍藏版)》请在冰豆网上搜索。
第三章VisualBasic语言基础
第三章VisualBasic语言基础
注释
注释是指在编写代码时,编写者在代码中添加的一些说明性语句。
注释是非执行语句,只是对有关的内容加以说明。
例如,说明某个过程的功能,定义某个变量的目的等。
在程序中添加注释是个良好的编程习惯。
每个程序员都有这样的体会:
自己编写的一些代码,过一段时间后再去阅读,会感到很费劲甚至难以读懂门阅读别人编写的代码更是一可想而知。
因此,在编写程序代码时,最好为代码添加注释,以便于自己或别人能较轻松地读懂代码。
在VB中,注释以Rem关键字开头,并且Rem关键字与注释内容之间要加一个空格。
注释可以是单独的一行,也可以写在其他语句行的后面。
如果在其他语句行后使用Rem关键字,则必须使用冒号(:
)与语句隔开。
也可以使用一个撇号(')来代替Rem关键字。
若使用撇号,则在其他语句行使用时不必加冒号。
如图3.1所示的是注释的写法。
在【代码】窗口中,注释添加完成后,自动以绿色显示。
在VB的【编辑】工具栏中还提供了专门用于设置注释块的按钮,使得将多行语句设置为注释或取消注释十分方便。
在默认情况下,【编辑】工具栏不出现在界面中,在【视图】菜单的【工具栏】子菜单中选择【编辑】选项即可打开【编辑】工具栏。
设置注释块的操作是:
在【代码】窗口中选中要设置为注释的单行或多行语句,单击【编辑】工具栏中的【设置注释块】按钮,即可为所选的每行语句前添加一个撒号('),将创门设置为注释。
单击【解除注释块】按钮,则情况相反。
分行与续行
有时候,一条语句可能会很长,如果将它写在一行上,将给阅读或打印代码带来不便。
在VB中,可以使用分行符(_)(一个空格和一条下划线)将一条语句写在两行或多行上。
例如:
Forml.Caption="分行".
语句可以分为两行写成:
Form1.Caption=_"分行".
在同一行内,分行符后面不能添加注释,例如下面的语句是错误的:
Fonm1.Caption=_'设置窗体标题。
"分行".
分行符一般添加在运算符的前后。
不能使用分行符将一个变量名或属性名分隔成两行,例如下面的语句是错误的:
Forml.Capt_.
ion="分行".
在通常情况下,一条语句占用一行,并且在语句末尾没有表示语句结束的符号。
但也可以将多行语句写在同一行上,相邻的两条语句中间使用冒一号(:
)作为续行符。
例如:
Form1.Caption="断行":
Form1.FontSize=14:
Print"你好".
在打印程序时,将多行语句写在同一行上可以节省纸张。
但为了便于程序的阅读,最好在一行上只写一条语句。
变量的命名规则
不同的变量是通过变量名标识的。
在命名变量时,有很大的灵活性,例如,可以将用来保存产品价格的变量命名为X,也可以将其命名为Price或其他名称。
在较大型的程序中,最好用带有一定描述性的名称来命名对象,如将表示价格的变量命名为Price,将表示年龄的变量命名为Age等,这样会使得程序易于阅读与维护。
在VB中,变量的命名还需要遵循以下几条规则:
变量名必须以字母或汉字开头。
例如,abc.姓名、年n3和ff28等变量名都是合法的,而3abc.#xy和+uu等变量名是非法的。
不能在变量名中出现句号、空格或者嵌入!
、@、#、$、%、&等字符。
例如,#,d%等变量名是合法的,而r%R,a#bc和abe等变量名是非法的。
不能使用VB的关键字作为变量的名字。
关键字是VB内部使用的词,是该语言的组成部分。
例如,print,dim和For等都是非法变量名。
变量名不得超过255个字符。
变量名在变量的有效范围内必须是唯一的。
变量名不区分大小写。
例如,变量ABC,Abc和aBc表示同一变量。
变量的数据类型
除名称外,变量还有数据类型。
变量的数据类型决定了如何将变量的值存储到计算机的内存中。
所有的变量都具有数据类型,以决定它能够存储哪种类型的数据。
例如,某个变量的数据类型为整型(存放整数),但是如果在代码中将一个字符串赋给它,则运行程序时会出现类型不匹配的错误,并弹出消息框,提示用户类型不匹配。
在声明变量时可指定它的数据类型。
表3.2中列出了VB所支持的基本数据类型。
1.数值型数据类型
VB支持6种数值型数据类型,分别是Byte(字节型)、Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)和Currency(货币型).
如果知道变量总是存放整数(如12)而不是带小数点的数字(如3.57),就应当将它声明为Integer类型或Long类型。
整数的运算速度较快,而且比其他数据类型占据的内存要少。
在Far```Next循环内作为计数器变量使用时,整数类型尤为高效。
如果变量包含小数,则可将它们声明为Single,Double或Currency变量。
浮点数值可表示为mmmEeee或mmmDeee形式。
其中mmm是假数,而eee是指数(以10为底的幂).Single数据类型的最大正数值为3.402823E+38,即3.4乘以10的38次方;Double数据类型的最大正数值是1.797b9313486232D+308即1.8乘以10的308次方。
用D将数值文字中的假数部分和指数部分隔开,就会导致将该值作为Double数据类型来处理。
同样,用这种方式使用E,也会导致将该值作为Sings.数据类型来处理。
Currency数据类型的定点实数保留小数点右面4位和小数点左面15位,适用于货币计算。
浮点(Single和Double)数比Currency的有效范围人得多,但有可能产生小的进位误差。
Byte数据类型主要用于存储二进制数。
所有数值变量都可相互赋值。
在将浮点数赋予整数之前,VB会将浮点数的小数部分四舍五入,而不是将小数部分去掉。
2.字符串型数据类型
如果变量总是包含字符串而从不包含数值,就可将其声明为字符串型。
字符串是用双引一号括起来的若干个字符。
字符串中的字符可以是计算机系统允许使用的任意字符。
例如:
"VisualBasic6.0"、"***计算机%%%"和"xxx@"
等都是合法的字符串。
字符串的长度是指字符串中字符的个数,不含任柯字符的字符串为空字符串。
字符串在内存中是按字符连续存储的,每个字符占用一个字节。
例如字符串"1234"占用4个字节的内存。
而1234是一个整型数据,它占用两个字节。
如果字符串表示数值,则可将字符串赋予数值变量。
也可将数值赋予字符串变量。
3.日期型数据类型
日期型变量用来存储日期或时间。
可以表示的口期范围为从公元l00年1月1日到公元9999年12月31口,时间则是从0:
00:
00到23:
59:
59.日期常数必须用"#"号括起来。
例如,如果变量Mydate是一个日期型变量,可以使用下面几种方式为该变量赋值:
Mydate=#3/19/1977
Mydate=1977-04-19#
Mydate=#77.3,19#
Mydate=#April19,1944#
Mydate=#19Apr77#
上面几个语句的作用完全相同,都是将日期常数1977年4月19赋给日期变量Mydate.并且,在【代码】窗口中输入上述任一语句,VB都将自动将其转换为第一条语句的格式,即Mydate=#4/19/1977#.
如果将一个数值型数据赋给日期变量,则小数点左边的数字代表日期,右边的数字代表时间;O为午夜,0.5为中午12点;负数代表的是1899年12月31日之前的日期或时间。
例如,从现在起过6小时的日期和时间可以表示为;
now+0.25
4.布尔型数据类型
若变量的值只是"true/false"、"yes/no"、"on/off"等信息,则可将它声明为布尔类型。
布尔类型的缺省值为False.
5.变体型数据类型
数据类型为变体型的变量可以存储所有系统定义类型的数据。
变体型数据类型可在不同场合代表不同的数据类型。
如果把数据赋予变体变量,则不必在这些数据的类型间进行转换:
VsiualBasic会自动完成任何必要的转换,例如,如果变量Myvariant为变体型变量,下面是该变量的几条赋值语句以及说明:
Myvariant="15" 变量值包含两个字符的字符串
Myvariant=17-Myvariant 此时变量值为数值2
Myvariant="A"&Myvariant 此时变量值我为字符串"A2"
变量的声明
在使用变量前,一般要先声明变量名及其类型,以决定系统为变量分配的存储单元。
在VB中可以通过以下几种方式来声明变量及其类型;
1.使用Dim语句
使用Dim语句声明变量的一般形式如下:
Dim变量名AS数据类型。
例如:
DimNuberAsInteger
DimCountAsSingle
DimNameasString
也可以使用数据类型的类型符来替代As子句。
例如,上述3个声明语句也可写成:
DimNumber%
DimCount!
DimName$
注意:
变量名与类型符之间不能有空格
一条Dim语句也可以声明多个变量,每个变量都需要有自己的声明类型,并且各变量之间以逗号隔开。
例如,可以将上面的3条语句改写成一条语句:
DimNumberAsInteger,CountAsSingle, NameAsString
如果忽略了Dim语句中的As子句,则VB将变量的类型认为是变体型。
例如下面语句声明的Myv变量的数据类型是变体型:
DimMyv
在默认情况下,字符串变量是不定长的,随着对字符串变量赋予新的数据,它的长度可增可减,也可以将字符串变量声明为定长的。
声明一个定长字符串变量的语法如下:
Dim变量名AsString*长度
例如,声明一个长度为50个字符的字符串变量,可用下列语句:
DimNameAsStrring*50
如果赋给该定长字符串变量的字符少于50个,则用空格将Name变量的不足部分填满。
因为定长字符串用空格填充尾部多余的空间,所以在处理定长字符串时可发现,删除空格的Trim和Rtrim函数是很有用的。
如果赋给的字符串的长度大于50,则VB会自动截去超出部分的字符。
例如,编写窗体的Click事件过程如下:
PrivateSubFrom_Click()
DimstrlAsString
Dimstr2AsString*4
Dimstr3AsString*2
Str1="中华人民共和国"
Str2="中华人民共和国"
Str3="中华人民共和国"
Printstr1
Printstr2
Printstr3
EndSub
在该段代码中,声明了3个字符串变量。
其中Strl为不定长字符串变量,Str2和Str3为定长字符串变量,并且长度分别为4和2.为这3个字符串变量赋予相同的值"中华人民共和国".然后使用Print语句在窗体上分别打印出各字符串变量。
运行该程序,单击窗体,则窗体上打印出3行文字,如图3.3所示。
由于字符串变量Str2最多能存储4个字符,因此,字符串"中华人民共和国"的后3个字符被截去。
同理,Str3中只存储了两个字符,其他字符被截去。
2.隐式声明
在VB中,也可以不事先声明而直接使用变量,这种方式称为隐式声明。
上述使用Dim语句声明变量的方式称为显式声明。
所有隐式声明的变量都是变体型数据类型。
在使用一个变量之前并不必先声明这个变量。
例如,不必在使用变量TempVal之前先声明它:
FunctionsafeSqr(num)
TempVal=Abs(num)
SsfeSqr=Sqr(TempVal)
EndFunction
VB用这个名字自动创建一个变量,使用这个变量时,可以认为它就是显式声明的。
虽然这种方法很方便,但是如果把变量名拼错了的话,系统会认为它是另一个新的变量,从而会导致一个难以查找的错误。
如果知道变量确实总是存储特定类型的数据,最好还是先声明变量的数据类型,这样VB会以更高的效率处理这个数据。
例如,存储人名的变量最好声明成字符串数据类型,因为名字总是由字符组成的。
为了避免写错变量名引起的麻烦,可以在【代码】窗口的声明段中加入语句:
OptionExplicit
这样,在代码中只要遇到一个未经显式声明就当成变量的名字,VisualBasic都会弹出错误警告。
例如,编写一段代码如图3.4所示,其中声明了变量s1,而没有声明变量s2,运行该程序,单击窗体,则弹出编译错误消息框,提示用户变量未定义。
如果删除optionExplicit语句,再次执行程序,则不会再出现变量未定义的错误。
也可以将系统定制为总要求显式声明变量。
执行【工具】菜单中的【选项】命令,打开如图3.5所示的【选项】对话框,在【编辑器】选项卡中选中【要求变量声明】复选框。
这样就在任何新建的模块中自动插入如OptionExplicit语句,但不会在已经建立起来的模块中自动插入。
所以在工程内部,只能用手工方法向现有模块添加OptionExplicit语句。
注意:
OptionExplicit语句的作用范圈仅限于语句所在模块,所以,对每个需要强制式变量声明的窗体棋块和标准摸块,都必须将OptionExplicit语句放在它们各自的声明段中。
变量的作用域
一个变量声明后,并不是在任何地方都能使用它。
每个变量都有它的作用域。
变量的作用域决定了哪些子过程和函数过程可使用该变量。
变量的声明方式和声明位置决定了它的作用域。
在理解变量的作用域之前,首先需要了解一个应用程序的组成。
一般应用程序的组成如图3.6所示。
关于在工程中添加窗体与模块的操作在第2章中已经介绍过了。
本书只涉及到窗体模块和标准模块。
标准模块主要要来定义一些公用的变量和过程,以供各窗体模块中的事件过程引用。
变量的作用域可分为3个层次:
局部变量、模块级变量和全局变量。
表3.2中列出了变量的作用范围及使用规则。
注意:
如不加特别说明,模块是指对窗体模块与标准模块的统称。
1.局部变量。
局部变量是指在过程内部使用Dim语句或Static语句声明的变量。
在过程内不加声明而直接使用的变量也是局部变量。
我们知道,一个应用程序包含若干个模块,模块中又包含若干个过程。
对于局部变量,只能在声明它的过程中使用,本模块的其他过程以及其他模块均不可访问。
在不同的过程中可以声明相同名称的变量,它们相互独立,互不干扰。
2.模块级变量。
模块级变量是指在模块的任何过程之外,即在模块的声明部分使用Dim语句或Private语句声明的变量。
可被本模块的任何过程访问。
3.全局变量。
全局变量是指在模块的任何过程之外,即在模块的"通用声明"段使用Public语句声明的变量。
可被本模块的任何过程访问。
需要注意的是。
在窗体模块声明的全局变量,在访问时需要在变量名前加窗体名。
而在标准模块中声明的全局变量可以直接访问。
例如,在窗体模块中定义了四个变量A、B、C和D,如图3.7示。
则A为全局变量,B为模块级变量,C和D为局部变量。
需要说明的是,在VB中作用域不同的变量的名称可以相同,并且作用域小的变量的优先级高。
静态变量
在过程中,既可以使用Dim语句声明局部变量,也可以使用Static语句声明局部变量。
并且Static语句的一般形式与Dim语句相同:
Static变量名As数据类型。
使用Static语句声明的变量称为静态变量,它与用Dim语句声明的变量的不同之处在于:
当一个过程结束时,过程中所用到的静态变量的值会保留,下次再调用此过程时,变量的初值是上次调用结束时被保留的值。
对于使用Dim语句声明的局部变量,随过程的调用而分配存储单元,并进行变量的初始化。
一旦过程结束,变量的内容自动消失,占用的存储单元也被释放。
因此,每次调用过程时,变量都将重新初始化。
下面,用一个实例来说明静态变量的特点。
实例3.1静态变量
在【代码】窗口中编写窗体的Click事件过程如下:
PrivateSubForm_Click()
DimSumAsInteger
PrintSum
Sum=Sum+1
EndSub
运行程序,在窗体上单击数次,窗体上显示的数字始终是0,如图3.8所示。
将上述代码中的Dim替换成Static,如下所示:
PrivateSubForm_Click()
StaticSumAsInterger
PrintSum
Sum=Sum+1
EndSub
再次运行程序,则每单击一次窗体,显示的数字加1,如图3.9所示。
常量
在程序执行过程中数值始终不改变的变量称为常量。
例如,如果要进行数学计算,则程序中可能多次出现数值pi(3.14159……),如果将这个值使用一个常量pi来表示,在程序中就可以使用常量pi来替代常数3.14159,而不必一遍遍地输入3.14159.
定义常量的形式如下:
Const<常量名>[As类型]=常量值常量的命名规则和变量一样。
As子句是可选的,它用来说明常量的数据类型,如果省略,则数据类型由表达式决定。
常量值可以是数字、字符串或由它们与运算符组合成的简单表达式。
例如:
ConstpiAsDouble=3.14159265358979
ConstStr="ABCDEF"
ConstStr=(2+3)*7
常量声明中不能使用函数,例如:
ConstNum=Sin(30).
语句是错误的。
常量声明语句中可以包含其他常量。
例如,在数字计算中,数值pi和数值2*pi样常用,可以将这两个值都声明为常量如下:
ConstpiAsDouble=3.14159265358979
Constpi2AsDouble=2*pi
一旦声明了常量,就不能在此后的语句中改变它的数值,这是个安全特性,也是声明常量的一个好处。
例如,如果在程序"1"使用赋值语句来给常量赋值,编译程序将产生错误,并弹出消息框提示用户不允许给常量赋值:
常量也有作用范围的概念,这一点与变量相同。
例如常量pi通常在模块中声明为:
PublicConstpiAsDouble=3.1415926358979
以便每个过程都能访问它。
VB自身还定义了大量的内部常量。
例如,复选框控件的Value属性的值可以为0(取消)、1(选定)或2(变灰).可以不用下列语句:
Checkl.Value=0.
Check2.Value=2.
而使用内部常量vbUnchecked和vbGrayed来代替0和2:
Check1.Value=vbGrayed.
Check2.Value=vbGrayed.
常量vbUncheckedt和YbGrayed是VB语言固有的,无需声明,其符号化的名称使程序更容易阅读和维护。
VisuatBasic固有常量均用前缀vb表示,声明自己的常量时不要用这个前缀。
其他构件用其他的前缀,例如,数据库访问对象用前缀为db的常量。
算术运算符
程序中对数据的操作,其实就是指对数据的各种运算。
被运算的对象,如常数、常量和变量等称为操作数。
运算符是用来对操作数进行各种运算的操作符号,如加号(+)、减号
(一)等。
诸多操作数通过运算符连成一个整体后,就成为一个表达式。
VB中具有丰富的运算符,可分为算术运算符、关系运算符、逻辑运算符和字符串运算符4种。
算术运算符用来进行算术运算。
VB提供的算术运算符如表3.3所示。
其中取负运算符
(一)只需一个操作数,称之为单目运算符。
其他运算符都需要两个操作数,称之为双目运算符。
运算符的优先级表示当表达式中有多个操作符时,先执行哪个操作符。
整除运算(\)的结果是商的整数部分。
例如,7\2表示整除,商为4.5,结果取整数部分3,不进行四舍五入。
如果参加整除的操作数是浮点数,则先按四舍五入的原则将它们变成整数,然后再执行整除运算。
例如,对于8.5\2,先将8.5变成9再进行整除,商为44.5,结果为4。
取余运算(Mod)是求两个整数相除后的余数。
如果参加取余运算的操作数是浮点数,则先按四舍五入的原则将它们变成整数,然后再执行取余运算。
例如,对于8.5\2.1,先将8.5变成9,2.1变成2,然后9除以2与1,因此取余结果为1。
关系运算符
关系运算符用来对两个操作数进行大小比较。
关系运算的结果是一个逻辑量,True〔真)或False(假).如果关系成立,则值为True,否则值为False.在VB中,True用-1表示,False用O表示。
VB中有6种关系运算符,如表3.4所示。
用来比较的操作数可以是数值型,也可以是字符串型。
数值以大小进行比较是显然的。
字符串的比较是按照字符的ASCII码值的大小来比较的。
即首先比较两个字符串第一个字符,ASCII码值大的字符串大。
如果第一个字符相同,则比较第二个字符,依次类推。
例如,由于小写字母的ASCII码大,因此关系表达式"abc">"abc"的值为Ture.关于字符的ASCII码对照表,读者可参见本书下一章。
逻辑运算符
逻辑运算符的作用是对操作数进行逻辑运算。
操作数可以是逻辑量(True或False)或关系表达式。
逻辑运算的结果也是一个逻辑量。
表3.5中列出了VB中的6种逻辑运算符。
字符串运算符
字符串运算符有两个:
"&"和"+",它们的作用是将两个字符串拼接起来。
例如:
"VisaulBasic"&"程序设计语言结果为" 结果为"VisaulBasic程序设计语言"
"电脑"+"爱好者" 结果为"电脑爱好者"
StrS="计算机"
str&"与网络" 结果为"计算机与网络"
注意:
变量名与&之间一定要加一个空格。
因为&本身还是长整型的类型符,不加空格容易造成误会。
"&"运算符会自动将非字符型的数据转换成字符串