第1章 Visual Basic语言基础
Visual Basic(简称VB)是Microsoft公司于1991年推出的基于窗口操作系统的可视化程序设计语言。Visual Basic是在早期的Basic语言基础上发展起来的,其语法与Basic语言的语法基本相同。Visual Basic既可采用先进的面向对象的程序设计(OOP)方法,同时又能兼容传统的面向过程的结构化程序设计方法。
Visual Basic使用“工程”来管理一个应用程序中的所有文件,每个“工程”都包含了一个以“.vbp”为扩展名的“工程文件”。
Visual Basic中有3种状态,分别为:设计模式、运行模式、中断模式。
Visual Basic提供了4种工具栏,包括:“编辑”、“标准”、“窗体编辑器”和“调试”。默认情况下,只显示其中的“标准”工具栏。
窗体窗口也称对象窗口,是用来进行界面设计的窗口。当新建一个工程时,Visual Basic自动创建一个新窗体,并命名为Form1。窗体是Visual Basic应用程序的基本构造模块,在程序运行时,是人与程序交互操作的实际窗口。在设计状态窗体是可见的,运行时可通过属性控制窗体的可见性。
除了一般窗体外,还有一种MDI多文档窗体,它可以包含子窗体,每个子窗体都是独立的。
“工程”是指用于创建一个应用程序的文件的集合。
所谓面向对象的程序设计方法,就是将代码和数据集成到一个独立的对象中。
在面向对象的程序设计中,“对象”是程序设计的基本单位,“类”是指用来创建对象的模板,它定义了一组相似对象所共同具有的属性、方法和事件,是一组具有相同性质的对象的统称。类是对象的抽象,它里面封装的是数据和代码。对象是通过类来产生的,是类的一个具体实例。由类生成对象后,类中的数据和代码也将被继承到对象中。
在Visual Basic程序设计中,对象的状态称为对象的属性,用数据来表示。对象的行为称为对象的方法,用程序代码来实现。而事件就是能够被对象所识别的动作,也就是说,所谓“事件”,就是使某个对象进入活动状态的一种操作或动作。
建立一个应用程序的主要步骤如下:
① 创建应用程序的用户界面;
② 设置界面上各个对象的属性;
③ 编写对象响应事件的程序代码;
④ 保存工程;
⑤ 程序运行和调试;
⑥ 生成可执行程序文件。
对象属性的设置,可以通过以下两种方法:
(1) 在设计阶段利用属性窗口直接设置对象的属性。
(2) 在程序代码中通过赋值实现,其格式为: 对象.属性=属性值
代码中所有有意义的符号均为西文符号。
保存时应先保存工程中的其他文件,再保存工程。
单击“调试”按钮后转到Break(中断)状态,并出现代码窗口,相应的错误代码会以黄色显示标明。
一个Visual Basic应用程序(又称工程或项目)由窗体界面和程序代码两个部分组成。Visual Basic的窗体和控件提供程序的可视化界面,程序代码则由若干被称为“过程”的代码组成,这些过程又被组织在“模块”之中。
“过程”是用来执行一个特定任务的程序代码段,可用于替代重复任务或共享任务。根据执行的方式,又可把“过程”分为“事件过程”和“通用过程”。我们为窗体上的各种对象编写的用来响应由用户或系统引发的各种事件的代码段都是“事件过程”。事件过程存储在被称为“窗体模块”的文件中(.frm),而且在默认情况时,是“私有的”(Private)。也就是说,事件过程在未加特别说明时,仅在该窗体内有效。
通用过程在默认情况下,是“共有的”(Public)。
模块是Visual Basic用于将不同类型过程代码组织到一起而提供的一种结构。Visual Basic的代码存储在模块中。模块有3种类型:窗体、标准和类。
(1) 窗体模块(.frm)一个工程文件至少有一个窗体,最多可达255个窗体。
(2) 标准模块(.bas)标准模块中保存的过程都是通用过程。
(3) 类模块(.cls)类模块是面向对象编程的基础。可在类模块中编写代码建立新对象。
对于Visual Basic中的关键字,首字母被自动转换成大写,其余字母被转换成小写。
Visual Basic程序是按行书写的,一行最多允许255个字符。一条语句可以写在一行上,也可以在行尾添加“续行标志”(即1个空格加下划线“_”),而分写在多行上;在同一行上也可以书写多条语句,但语句之间要用冒号“:”分隔。
注释以Rem开头,也可以使用单引号“’”。
Visual Basic的基本数据类型有数值型、货币型、字节型、日期型、逻辑型、字符串型、对象型和变体型,其中变体型数据是Visual Basic的默认数据类型,它可以存储各种类型的数据。
(1) 数值型
数值型分为整数型和实数型两大类。整数型数据是指不带小数点和指数符号的数,按表示范围整数型可分为整型、长整型;实数型数据分单精度型和双精度型。
l 整型(Integer,类型符%)
l 长整型(Long,类型符&)
l 单精度型(Single,类型符!)
l 双精度型(Double,类型符#)
(2) 货币型(Currency, 类型符@)
(3) 字节型(Byte,无类型符)
(4) 日期型(Date)
日期和时间必须被放置在一对#号之间,允许用各种表示日期的形式,Visual Basic系统会自动转换成mm/dd/yy(月/日/年)的形式,但时间必须用“:”分隔。
(5) 逻辑型(Boolean)
在内存中占用2个字节。若将逻辑性数据转换成数值型,则True转换为-1,False转换为0;当数值型数据转换为逻辑型数据时,非0的数据转换为True,0转换为False。
(6) 字符串型(String,类型符$)
字符串是一个字符序列,必须用双引号括起来。长度为零的字符串称为空字符串,即””。对于定长字符串,当字符长度低于规定长度,即用空格填满;当字符长度多于规定长度,则截去多余字符。
(7) 对象性(Object)
在内存中占用4个字节。
(8) 变体型(Variant)
变体型是一种特殊的数据类型,又称为万用数据类型。除了定长的String数据及用户自定义的数据类型之外,可以处理任何类型的数据而不必进行数据类型的转换。
Variant数据类型是Visual Basic对所有未定义的变量的默认数据类型的定会以。通过VarType函数尅检测Variant型变量中保存的具体的数据类型。
除了可以像其他标准数据类型一样操作外,Variant还包含3种特定值:Empty、Null和Error。
根据常量的数据类型可分为数值常量、字符串常量、逻辑型常量、日期型常量和符号常量。
对于数值常量,除了可用十进制数表示外,还可以使用八进制数(数值前加&O)和十六进制数(数值前加&H)表示。
定点数是带有小数点的正数或负数。定点数表示数的范围比较小。
浮点数由尾数及指数两部分组成,单精度浮点数的指数用E(或e)表示,双精度浮点数的指数用D(或d)表示。
以符号形式表示的常量称为“符号常量”,符号常量又分为两种:系统常量和用户定义常量。
Visual Basic6.0提供了颜色常量、控件常量、窗体常量、绘图常量、键码常量等32类近千个常量。
用户定义常量使用Const语句来给常量分配名字、值和类型,其形式如下:
[Public|Private] Const <常量名> [As <数据类型>]=<表达式>……
<常量名>是一个长度不超过255个字符,只能由字母、数字和下划线组成且首字母必须是字母的字符串。
若省略该选项,则数据类型由表达式决定,也可在符号常量名后家类型符来确定。
<表达式>由数值常量、字符串常量以及运算符组成,可以包含前面定义过的常量,但不能使用函数调用。
变量的命名规则
l 必须以字母开头,后跟字母、数字或下划线,不能出现点号、空格和用于类型说明的字符%、&、!、#、@、$。
l 变量名得长度不能超过255个字符。
l 不区分大小写。
l 在同一个作用域内变量名必须是唯一的,定义的标识符不能和Visual Basic中的运算符、语句、函数和过程名等关键字同名,同时也不能与系统已有的方法同名。
l 不得使用Visual Basic系统保留字,即语句中的关键字、公共函数名、窗体与控件对象的属性名、方法名等。
未加变量声明语句(称为隐式申明)直接使用的变量,系统将一律按Variant类型变量予以处理。该类型较特殊,可以在不同的位置表示不同的类型,并且用户不需要专门进行类型转换,这时系统会自动将其转换成与之相适应的类型。但是,变体型变量要占用较多的内存,并影响程序运行的效率。
可以使用以下4种说明语句来声明变量的类型:
l 用Dim语句声明变量,格式如下:
Dim <变量名> <As 类型> [,<变量名> <As 类型>]
Dim语句既可用于声明模块级得变量,也可用于声明过程级得变量。在用Dim语句声明一个变量后,系统自动为该变量赋予一个初始值。若变量是数值型的,则初始值为0;若变量是字符型的,则初始值为空串;逻辑型的变量的初始值为False。
l Public语句用于声明全局变量。全局变量可被工程中任何一个过程或函数访问。在模块中声明的全局变量可以直接使用;在窗体中声明的全局变量,在其他窗体或模块中引用这个变量时,必须指出其所在的对象。
l Private语句用于声明窗体/模块级变量。要在该窗体或模块内的过程之外定义,即在“代码编辑器“窗口中的对象列表框中选择“通用”,然后在“代码”编辑栏中庸Private或Dim语句声明变量。
局部变量仅在使用它的过程中声明既可。
l Static语句用于声明过程级的静态变量。
强制显示声明——Option Explicit语句
Visual Basic中的运算符包括算数运算符、字符串运算符、关系运算符和逻辑运算符4类。
表达式由常量、变量、运算符、函数和圆括号按一定的规则组成。
不同类型的运算符优先级如下:算数运算符>字符运算符>关系运算符>逻辑运算符
1. 算术运算符与算术表达式
运算符 |
说明 |
优先级 |
^ |
指数运算符 |
1 |
- |
负号运算符 |
2 |
* / |
乘法和除法运算符 |
3 |
\ |
整除运算符 |
4 |
Mod |
取余运算符 |
5 |
+ - |
加法和减法运算符 |
6 |
2. 字符串运算符和字符表达式
字符串运算符有两个:“+”和“&”,它们都是将两个字符串连接起来。“+”与“&”的区别是:“+”两边必须是字符串,“&”则不一定。若“+”符两边都是字符串,则实现两个字符串的连接;若一个为数字字符串而另一个为数字则进行相加运算;而一个为字符串,另一个为数字则出错。“&”符两边不管是字符型还是数字型数据,进行连接操作之前,系统将先把操作数转换成字符型,然后再连接。
如果“&”一边是字符,另一边是数值,则数值与“&”之间必须有一个空格。如果是字符串变量与“&”连接,则不需要加空格,Visual Basic系统会自动按有空格处理。
3. 关系运算符与关系表达式
关系运算符都是双目运算。关系运算也称比较运算,它表示不等式的真或假,也就是说,关系表达式的运算结果为逻辑值。
各个关系运算符的优先级是相同的,运算顺序从左到右。
除比较大小的关系运算符外,还有:
运算符 |
说明 |
Like |
字符串模式匹配运算符 |
Is |
对象一致比较运算符 |
4. 逻辑运算符与逻辑表达式
逻辑运算符除Not是单目运算符(要求一个操作数),其余都是双目运算符。
运算符 |
说明 |
Not |
取反运算符(运算数为假时,结果为真;反之结果为假) |
And |
与运算符(运算符均为真时,结果才为真) |
Or |
或运算符(运算数中有一个为真时,结果为真) |
Xor |
异或运算符(运算符相反时,结果才为真) |
Eqv |
等价运算符(运算数相同时才为真,其余结果均为假) |
Imp |
蕴涵运算符(第一个运算数为真,第二个运算数为假时,结果才为真,其余结果均为假) |
函数名也是Visual Basic的关键字。
1. 常用算术函数
(1) 绝对值函数
格式:Abs (数值表达式)
功能:返回数值表达式的绝对值
(2) 符号函数
格式: Sgn (数值表达式)
功能:返回数值表达式的符号,当表达式的值为正、零和负数时,函数值分别为1、0、-1.
(3) 平方根函数
格式:Sqr (数值表达式)
功能:根据给定的正数,求出平方根。
(4) 指数函数
格式:Exp (数值表达式)
功能:求自然指数函数ex 的值,其中e=2.71828,x为数值表达式的值。
(5) 对数函数
格式:Log (数值表达式)
功能:求自然对数函数,也就是Exp()函数的逆运算函数。
(6) 取整数函数
格式1:Int (数值表达式)
格式2:Fix (数值表达式)
功能:Int()函数取不大于数值表达式的最大整数;Fix()函数为截断取整,即去掉小数后的数。
(7) 随机函数
格式:Rnd [(数值表达式)]
功能:产生一个(0,1)区间内的随机数
Rnd函数调用方式可以直接写:Rnd或Rnd()或Rnd(数值)。
(8) 四舍五入函数
格式:Round [(数值表达式)]
功能:对数值表达式进行四舍五入。
(9) 正弦函数
格式:Sin (数值表达式)
功能:求正弦值,参数的单位是弧度。
(10) 余弦函数
格式:Cos (数值表达式)
功能:求余弦值,参数的单位是弧度。
(11) 正切函数
格式:Tan (数值表达式)
功能:求正切值,参数的单位是弧度。
(12) 反正切函数
格式:Atn (数值表达式)
功能:求反正切值,函数返回的是主值区间的弧度值。
2. 常用的字符函数
(1) 求子串位置的函数
格式1:Instr ([N,]C1,C2)
格式2:Instrb ([N,]C1,C2)
功能:从C1的第N个位置起查找C2,当C2是C1的子串时,返回C2在C1中首次出现的字符位置,否则返回0。省略N时,则从第1个字符开始查找。Instr函数与Instrb函数的功能类似,只是后者返回的是C2在C1中首次出现的字节位置。
(2) 变大写和小写函数
格式:Ucase [$](C)
格式:Lcase [$](C)
功能:Ucase()函数把字符串C中的小写字母改为大写字母;Lcase()函数把字符串C中的大写字母改为小写字母,其它字符不变。
(3) 字符串长度函数
格式:Len [$](C)
功能:求出字符串C中的字符个数。
(4) 子串选取函数
格式:Left [$](C,N)
格式:Right [$](C,N)
格式:Mid [$](C,N1,N2)
功能:从字符串种取一子串。Mid()函数从中间截取字符串,其中第N1,N2参数分别表示从第N1个字符开始,共截取N2个字符。
(5) 删除首尾部空格函数
格式:Ltrim [$](C)
格式:Rtrim [$](C)
格式:Trim [$](C)
功能:Trim()删除字符串首部和尾部的空格。
这3个函数均不能删除字符串中间的空格。
(6) 建立空格函数
格式:Space[$](N)
功能:产生N个空格的字符串。
(7) 字符串填充函数
格式:String [$](N,C)
功能:返回N个由C中首字符组成的字符串。
(8) 字符串比较函数
格式:StrComp (C1,C2,[N])
功能:用来比较两个字符串的大小。其中N为可选参数,N=0表示区分字符大小写;N=1不区分,省略N区分大小写。
3. 转换函数
(1) 十进制数转换十六进制数函数
格式:Hex [$](N)
(2) 十进制数转换八进制数函数
格式:Oct [$](N)
(3) 求ASCⅡ函数
格式:ASC (C)
功能:给出以十进制数返回字符串C的首字符的ASCⅡ码。若第一个是汉字,则给出该汉字机内码的十进制数。
(4) 数值转换成字符函数
格式:Str[$](x)
功能:将数值x转换成字符串(含符号位)。
(5) ASCⅡ转换成字符函数
格式:Chr[$](N)
功能:将ASCⅡ值N转换成字符。
(6) 字符串转换成数值函数
格式:Val (C)
功能:将数字字符串从左至右转换成数值,遇到非数字字符时停止转换。当字符串以非数字字符开头时,函数值为零。转换过程中,开头的所有空格被自动忽略,尾部空格作为非数字字符对待。
4. 日期与时间函数
(1) 系统日期和时间
格式:Date [$][()]
格式:Time [$][()]
格式:Now [$][()]
功能:Now函数值为系统当前的日期和时间。
(2) 年份、月份和日函数
格式:Year (D)
格式:Month (D)
格式:Day (D)
功能:Day()函数值为1~31之间的整型数。
(3) 求星期几函数
格式:Weekday (D)
功能:得到日期表达式D的星期数(1~7),星期日为1,以此类推。
5. 格式输出函数
格式输出Format[$]函数是专门用于将数值、日期和字符串数据按指定格式输出,即实现数值格式化功能、日期和时间格式化功能以及字符串格式化功能。其形式如下:
Format[$](<表达式>,fmt$)
式中的fmt$是用于格式控制的字符串。格式控制字符有:
#、0、%、.、,、¥、+、-、(、)、E+、E-
其中,“#”和“0”是数位控制符;“.”和“,”是标点控制符;“E+”和“E-”为指数输出控制符;其他是符号控制符。
字符 |
意义 |
字符 |
意义 |
0 |
显示一数字,若此位置没有数字则补0 |
. |
小数点 |
# |
显示一数字,若此位置没有数字则不显示 |
, |
千位的分隔符 |
% |
数字乘以100后再在其右边加上“%”号 |
- + $ () |
这些字符出现在fmt里将原样输出 |
函数名中的字符用大写、小写或大小写混合均可以,函数名中用方括号括起来的¥可有可无。
赋值语句具有赋值和计算的双重功能。
Visual Basic与用户之间的直接交互是通过InputBox函数、Msgbox函数和过程实现的。InputBox函数的返回值为字符型,MsgBox函数的返回值是一个整数。
按钮是一个由按钮值+图标值+默认按钮+等待模式而组成的数值表达式。