第3章 掌握Visual Basic语言基础
(名师课堂:1小时27分)
Visual Basic 6.0是一个功能强大、使用方便、容易上手的工具,使用它编写应用程序,熟悉Visual Basic开发环境是第一步,掌握Visual Basic语言是基础,只有打好基础,循序渐进地学习,实际运用时才会得心应手。本章首先介绍组成Visual Basic语言的基本元素,包括关键字和标识符,数据类型,变量和常量,运算符和表达式以及代码编写规则。
通过学习本章,读者可以达到以下学习目的:
了解面向对象的概念;
了解VB的关键字和标识符;
掌握基本数据类型,了解记录类型和枚举类型;
掌握变量和常量;
掌握运算符和表达式;
了解代码编写规则。
3.1 简述对象概念
专题讲座:光盘文件\MR\Video\3\对象概念.exe
视频速递:详细讲解对象的概念
Visual Basic程序设计语言是基于面向对象的可视化程序设计语言,采用了一些面向对象的编程技术。在进行面向对象的程序设计前,首先要了解对象的概念及相关的属性、方法和事件。
3.1.1 什么是对象
对象是源自于对现实世界的描述,是程序设计中相对独立的基本实体,是代码和数据的集合。任何事物都可以看做是“对象”。“类”是同种事物的总称。例如:松树是一个类,每一个松树就是一个具体的对象;凳子是一个类,每一个具体的凳子就是一个对象;房子是一个类,每一个具体的房子就是一个对象,如图3.1所示。
图3.1 生活中的对象
在Visual Basic中,对象分为系统预定义对象和用户自定义对象两类。工具箱中的控件被创建在窗体上后成为真正的对象。在面向对象的程序设计中,每一个实体都可以称之为对象,窗体和控件是程序设计中最常使用的对象。它可以通过属性、方法、事件三个方面来全面地进行描述。
其中,属性是描述对象的数据;方法告诉对象应该做的事情;事件是对象所产生的事情,事件发生时可以编写代码进行处理。
『名词解释』
对象:“对象”是一个很广义的概念,在现实世界中的一切都可以看做是对象,比如一个人、一本书等。在计算机中,“对象”可以视为一个单元的代码和数据的组合。对象可以是一段应用程序,如控件或窗体。Visual Basic对象具有属性、方法和事件三个特点。
3.1.2 熟悉对象的属性
属性是指一个对象的性质和特性,与物体一样,不同的对象拥有不同的特征,属性就是以数值、字符串等形式描述这些特征的。在Visual Basic中,常见的属性有标题(Caption)、名称(Name)、颜色(Color)、字体大小(FontSize)、是否可见(Visible)等。这些属性决定了对象在界面中具有的外观及功能。在程序设计时,需要合理、正确地设置对象的属性值。下面描述了现实世界中一个“汽车”对象的属性,如图3.2所示。
图3.2 一个“汽车”对象的属性(静态特性)
读者可以根据现实世界中对象的属性来理解程序设计中对象的属性。在Visual Basic中设置对象的属性可以通过属性窗口来完成,也可以在代码窗口中通过输入语句来进行设置。
语法:
对象名.属性名称=新设置的属性值
例如,将窗体frm_main的Caption属性值设置为“采购管理系统”,其对应的语句为:
frm_main.Caption = "采购管理系统"
编程技术:对象的属性
属性是一个对象所具有的静态性质、特征。
对象属性的设置:(1)在属性窗口中设置;(2)在程序代码中设置。代码中设置格式:对象名.属性名 = 属性值
3.1.3 理解对象的方法
方法是对象可以执行的操作,也就是说当给对象一个命令后,对象所做出的相应动作或反应就是对象的一个方法。它是用户可以使用对象名直接调用的通用子程序。下面描述了现实世界中一个“汽车”对象的方法,如图3.3所示。
图3.3 一个“汽车”对象的方法(动态特性)
根据方法是否有返回值,调用对象方法有以下两种方式。
1.有返回值
如果使用对象的方法有返回值,则需要把参数用括号括起来,其调用语法如下:
变量名称=对象名称.方法名称(参数列表)
例如,使用Point方法获取窗体中某个位置的颜色,代码如下:
FormColor1=Form1.Point(25,53)
学习手册
说明 对象的方法如果有多个参数,参数之间应该用逗号分隔。
2.无返回值
如果使用的方法没有返回值或不使用返回值,其调用语法如下:
对象名称.方法名称
例如,使用SetFocus方法,获取Text2焦点,其代码如下:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode=vbKeyReturn Then
Text2.SetFocus 'Text2获得焦点
End If End Sub
学习手册
注意 在调用对象方法时,若省略对象名,那么程序将把当前窗体作为对象。
编程技术:对象的方法
方法是一个对象所具有的动作和行为。
方法的设置格式:对象名.方法名称
在Visual Basic 6.0中,方法是系统预先规定好的函数和过程。用户只能调用方法,方法只能在代码中使用。
3.1.4 了解对象的事件
事件是对象能够识别并做出反应的外部刺激,主要作用是传递信息。在Visual Basic中,事件是由Visual Basic预先编辑完成的代码所提供的操作。如在键盘上按下某键或鼠标的单击操作等都称之为一个事件。用户编写事件过程的程序段,只有在触发到该事件时才会被激活。下面描述了现实世界中一个“汽车”对象的事件,如图3.4所示。
图3.4 一个“汽车”对象的事件
用户的每一个动作都是通过事件反应给系统的,从而决定程序的运行流程,形成了适合图形用户界面编程方式的事件驱动机制。这也是Visual Basic系统的一个显著特点。
不同的对象具有不同的事件,常见的事件有单击(Click)、双击(DblClick)、改变(Change)和装载(Load)等。
当在对象上发生了事件后,应用程序对这个事件所能做出的反应以及处理步骤就是事件过程。在Visual Basic中设计程序的主要工作就是为对象编写事件过程的程序代码。
语法:
Private Sub对象名称_事件名称() '事件响应程序代码 End Sub
对象名称:对象的Name属性。
事件名称:由Visual Basic预先定义好的赋给该对象的事件,并且该事件必须是对象所能识别的。
例如,在鼠标单击事件下实现锁定Text1控件,设置“删除”、“保存”等按钮不可用,“添加”按钮可用。其实现的代码如下:
Private Sub Cmd_cancel_Click()
Text1.Locked=True '锁定文本框
Cmd_del.Enabled=False '“删除”按钮不可用
Cmd_save.Enabled=False '“保存”按钮不可用
Cmd_add.Enabled=True '“添加”按钮可用
Cmd_edit.Enabled=False '“编辑”按钮不可用
End Sub
3.2 了解语句组成要素
专题讲座:光盘文件\MR\Video\3\语句组成要素.exe
视频速递:详细讲解关键字和标识符
语句是Visual Basic程序中最小可执行单元,每一行程序都可以称为一个语句。一个语句基本由常量、特殊符号、关键字和表达式组成。
3.2.1 认识Visual Basic中的关键字
关键字和标识符是Visual Basic 6.0代码中的一部分。关键字是指系统使用的具有特定含义的字符(如定义变量时使用的Dim语句),不能用做其他用途。关键字就像已经在国际上被注册了的各种商标,他们的图标和名字已经被占用,其他任何企业和个人不得使用,因为该商标已经在国际上被占用。而Visual Basic 6.0中的关键字已经被系统所占用,并赋予特定的含义,所以我们在开发程序的过程中不能将关键字作为其他用途。
常用的关键字有Dim、Private、Sub、Public、End、If、Else、Form、Me、Single、As、Integer、Unload、Do、While、MessageBox等。
『名词解释』
关键字:Visual Basic中一些赋予特定的含义,用做专门用途的字符串称为关键字。在Visual Basic集成开发环境中,会将关键字用特殊的方式标出。
3.2.2 掌握标识符的使用
在Visual Basic 6.0中所有的常量、变量、模块、函数、类、对象及其属性等都有各自的名称,这些名称就是标识符。因此,标识符就是指用于在编写代码时定义的名称。标识符可以理解为在程序中任何需要我们自己给它起名字的地方,这些我们自己给其起的名字就是标识符,例如:常量Pi、变量person_count、函数名BubbleSort、模块名connect_database、类名person和对象名zhangsan等。标识符就像在生活中我们每个人、每一件物品都有自己的名字一样。
例如,在一个Visual Basic 6.0工程中有如下标识符:
◆ 工程1:表示一个工程的标识符。
◆ Form1:表示一个窗体的标识符。
◆ Class1:表示一个类模块的标识符。
◆ Module1:表示一个模块的标识符。
用户也可以自己定义标识符来标示变量等的名称,这些用户自定义标识符需要符合一定的命名规则,就像我们起名字的时候,是把姓放在前面,名字放在后面,而国外是将名字放在前面,姓放在后面,这些都属于命名规则。
用户在定义标识符时需要遵守以下的原则:
(1)不能使用系统关键字。
(2)自定义的标识符必须以字母开头,以数字、大小写字母、下画线或者$符号结尾。
(3)标识符的长度不能超过255个字符,而对于控件、窗体、模块和类模块等的名字则不能超过40个字符。
(4)不区分字母大小写。
(5)在同一个作用域中不能出现同名的自定义标识符。
下面是合法标识符:
name user_age $page
下面是非法标识符:
4word String #$##
『名词解释』
标识符:Visual Basic 6.0中为各种常量、变量、模块、函数、类和对象等要素命名时使用的字符序列称为标识符。也可以理解为凡是自己可以起名字的地方都叫做标识符,都遵循标识符的命名规定。
3.3 掌握数据类型
专题讲座:光盘文件\MR\Video\3\数据类型.exe
视频速递:详细讲解数据类型
“数据”是信息在计算机内的表现形式,也是程序的处理对象。不同类型的数据有不同的操作方式和不同的取值范围。Visual Basic 6.0具有系统定义的基本数据类型,是Visual Basic 6.0中数据结构的基本单元。Visual Basic 6.0还有两种完全不同的数据类型:记录类型和枚举类型,它们的名称及数据项由用户任意定义。这两个数据类型使得Visual Basic 6.0中的数据类型得以扩展。下面给出数据类型的分类图,如图3.5所示。
图3.5 数据类型分类图
3.3.1 基本数据类型
Visual Basic 6.0提供的基本数据类型有字符型、数值型、布尔型和日期型,对于数值型数据,考虑到运算效率、所占空间及精度要求,又分为整数型、长整型、单精度型、双精度型、货币型和字节型。另外,还有变体型和对象型,这两种数据类型是实际编程过程中不常使用的。
有关基本数据类型的大体介绍如表3.1所示,其中加粗内容是常用的数据类型。
表3.1 基本数据类型
下面详细介绍常用的4种数据类型。
1.字符型
如果一个变量或常量包含字符串,就可以将其声明为字符型,即String类型。字符串是用双引号括起来的若干个字符。字符串中的字符可以是计算机系统允许使用的任意字符。例如,以下都是合法的Visual Basic 6.0字符串。
"VISUAL BASIC 6.0" "Welcome to Changchun" "吉林省长春市" "1+1=?" "8888" "***" ""(空字符串)
了解了字符串,再看一下在Visual Basic 6.0中如何声明字符型变量。
实例位置:光盘\MR\ Instance\3\3.1
【例3.1】 声明一个字符型变量A,代码如下。
Private A As String
然后将字符串“吉林省长春市”赋予这个变量,并用字符串函数Right取右边3个字符,最后输出,代码如下。
Private Sub Form_Load() A="吉林省长春市" '给字符型变量A赋值 A=Right(A,3) '用Right函数取右边3个字符 MsgBox A '用Msgbox函数输出字符型变量A End Sub
按【F5】键,运行程序,结果为:长春市。
按照默认规定,String变量或参数是一个可变长度的字符串,随着对字符串赋予新数据,它的长度可增可减。但也可以声明固定长度的字符串,语法如下。
String * size
实例位置:光盘文件\MR\ Instance\3\3.2
【例3.2】 将【例3.1】中的变量A改为固定长度为4的字符型变量,代码如下。
Private A As String*4 '声明一个固定长度为4的字符型变量
此时将字符串“吉林省长春市”赋予这个变量,用Msgbox函数输出,结果为“吉林省长”。这说明如果赋予字符串的长度大于4,就不是定长字符串了,则Visual Basic 6.0会直接截去超出部分的字符。反之,如果赋予字符串的长度少于4,则Visual Basic 6.0会用空格将变量A不足部分填满。
学习手册
说明 标准模块中的定长字符串用Public或Private语句声明。在窗体和类模块中,必须用Private语句声明定长字符串。
2.数值型
Visual Basic 6.0支持6种数值型数据类型,分别是整型(Integer)、长整型(Long)、单精度浮点型(Single)、双精度浮点型(Double)、货币型(Currency)和字节型(Byte)。
如果知道变量总是存放整数(如88)而不是带小数点的数字(如88.88),就应当将它声明为Integer类型或Long类型。因为整数的运算速度较快,而且比其他数据类型占据的内存要少。在For…Next循环语句(将在第4章介绍)中作为计数器变量使用时,整数类型尤其重要。
浮点数值可以表示为mmmEeee或mmmDeee的形式,其中mmm是底数,而eee是指数(以10为底的幂)。用E将数值文字中的底数部分或指数部分隔开,表示该值是Single类型;同样,用D则表示该值是Double类型。
货币类型(Currency)的数值保留小数点后4位和小数点前15位,适用于金额计算。
学习手册
说明 所有数值型变量都可以相互赋值。但浮点型或货币型数值赋予整型变量时,Visual Basic 6.0会自动将该数值的小数部分四舍五入之后去掉,而不是直接去掉。
例如:
Dim i As Integer
i = 2.6873453453
MsgBox I
‘输出结果为3。
字节型(Byte)数据类型是指变量中存放的是二进制数。在计算机中,经常将用来存储一个英文字母的8个二进制数称为是一个字节。一个英文字母无论大小写,都占用一个字节,而一个汉字占用两个字节的空间。
3.布尔型
若变量的值只是True/False、Yes/No、On/Off等信息,则可将其声明为布尔型,其默认值为False。例如,定义一个布尔型变量,输出该变量,代码如下。
Dim mybln As Boolean
MsgBox mybln
‘输出结果为False。
学习手册
说明 布尔是英国的逻辑学家,为了纪念他在逻辑学方面的卓越贡献,人们就用他的名字来标识逻辑变量。
4.日期型
日期型变量用来存储日期或时间。可以表示的日期范围为100年1月1日到9999年12月31日,时间则是从0:00:00到23:59:59。日期常数必须用“#”符号括起来。如果变量mydate是一个日期型变量,可以使用下面的几种格式为该变量赋值。
mydate=#2/4/1977# mydate=#1977-02-04# mydate=#77,2,4# mydate=#February 4,1977#
以上表示的都是1977年2月4日,并且无论在代码窗口中输入哪条语句,Visual Basic 6.0都将其自动转换为第一种形式,即mydate=#2/4/1977#。
实例位置:光盘文件\MR\ Instance\3\3.3
【例3.3】 赋予日期/时间变量的值与输出的日期/时间格式不一定一致,这与系统区域和语言选项中的设置有关,例如下面的代码。
Private Sub Form_Load()
Dim mydate As Date '定义日期型变量
mydate=#2/4/1977# ' 给变量赋值
MsgBox mydate ‘ 输出变量
End Sub
上述代码输出结果为77-02-04,原因是系统区域和语言选项中的短日期的格式为yy-mm-dd。
5.对象型
对象型用于存储程序中的对象。使用4个字节(32位地址)保存与对象有关的数据信息。
6.变体型
变体型数据类型可以存储所有系统定义的数据类型。变体型除了具有其他数据类型的特性外,还具有三个特殊的值:Empty、Null和Error。
(1)Empty
Empty是一个和0、零长度字符串或者Null值都不同的值。变体类型的数据在没有赋值前默认值为Empty。在使用时,可以使用IsEmpty函数来测试变量的值。
(2)Null
Null表示未知或者丢失的数据,Null具有以下特性:
◆ Null值只能赋值给变体数据,如果将其赋给非变体数据的变量,将会产生一个错误;
◆ 如果表达式中含有Null值,则整个表达式的计算结果为Null。
(3)Error
在变体变量中Error是一个特殊的值,用来标示已经发生过的过程中的错误状态。
3.3.2 记录类型
3.3.1节中介绍的各种数据类型是由系统设定的,下面介绍的数据类型将由用户自定义。用户自定义类型也称做记录类型,主要通过Type语句来实现,其语法格式如下。
[Private|Public]Type 数据类型名
数据类型元素名As类型名
数据类型元素名As类型名
……
End Type
数据类型名是要定义的数据类型的名字;数据类型元素名不能是数组名;类型名可以是任何基本数据类型,也可以是用户定义的类型。
学习手册
说明 (1)Type语句只能在模块级使用。使用Type语句声明了一个记录类型后,就可以在该声明范围内的任何位置声明该类型的变量。可以使用Dim、Private、Public、ReDim或Static语句来声明记录类型中的变量。
(2)在标准模块中,记录类型默认设置是公用的。可以使用Private关键字来改变其可见性。而在类模块中,记录类型只能是私有的,且使用Public关键字也不能改变其可见性。
(3)在Type…End Type语句块中不允许使用行号和行标签。
(4)用户自定义类型经常用来表示数据记录,该数据记录一般由多个不同数据类型的元素组成。
实例位置:光盘文件\MR\ Instance\3\3.4
【例3.4】 下面将使用Type语句声明一个新的数据类型Sell,然后为该类型中的各个元素赋值,最后输出,具体实现过程如下。
创建一个Visual Basic 6.0工程,在该工程中添加一个模块,在该模块的声明部分编写如下代码。
Type Sell name As String * 20 standard As String * 10 price As Currency End Type
在窗体的Form_Load事件过程中声明一个Sell类型mySell,然后为其各个元素赋初值,最后输出,代码如下。
Private Sub Form_Load() Dim mySell As Sell my Sell.name="Epson打印机" mySell.standard = "Epson Style C65" my Sell.price=450 MsgBox "产品名称:" & mySell.name & Chr(10) & "产品型号:" & mySell.standard & Chr(10) & "单价: " & mySell.price End Sub
按【F5】键,运行程序,结果如图3.6所示。
图3.6 消息对话框
3.3.3 枚举类型
枚举是为一组整数值提供便于记忆的标识符,它的作用是管理和使用常量。枚举类型主要使用Enum语句来定义,语法如下。
[Private|Public]Enum 数据类型名
数据类型元素名 = 整型常数表达式
数据类型元素名 = 整型常数表达式
……
End Enum
其中的整型常数表达式可以是默认的,默认情况下,第一个数据类型元素取值从0开始,其余数据类型元素名依次为1,2,3,4,5,…,枚举类型的实质就是定义一个符号常量集,并用一个名称表示该集合。
实例位置:光盘文件\MR\ Instance\3\3.5
【例3.5】 下面用Enum语句定义一个颜色类型,其中包括一些颜色常数,可以用于设计数据库的数据输入窗体,代码如下。
Public Enum myColors
myRose=&HE1E4FF ' 玫瑰红
myGray=&H908070 ' 灰色
myBlue=&HFF901E ' 蓝色
mySkyBlue=&HFFBF00 ' 天蓝
my SpringGreen=&H7FFF00 '春天绿
my ForestGreen=&H228B22 '森林绿
End Enum
在窗体中调用该枚举类型,设计文本框控件的前景色和窗体的背景颜色,关键代码如下:
Private Sub Form_Load() Text1.ForeColor=myColors.myBlue '文本框前景色 Form1.BackColor=myColors.myRose '窗体的背景色 End Sub
程序的运行效果如图3.7所示。
图3.7 枚举类型的使用
3.4 学习使用变量
专题讲座:光盘文件\MR\Video\3\变量.exe
视频速递:详细讲解变量的知识
前面介绍数据类型的同时,已经简单涉及了一些变量,这一节我们就详细介绍一下变量的概念及声明、变量的命名规则、变量的分类以及使用变量时的注意事项。
3.4.1 什么是变量
一个变量相当于一个容器,这个容器对应着计算机内存中的一块存储单元,因此,它可以保存数据。下面通过举例进一步说明变量。
【例3.6】 有两个存储单元,分别为strUser和strPassword,存放的值分别为管理员、111,如图3.8所示。
图3.8 存储管理员
也可以将这两个存储单元的值改为普通用户、222,如图3.9所示。
图3.9 存储普通用户
例如,在计算员工加班费时,使用的计算公式为:加班费=8×加班小时数。这里面每小时的加班费用是固定的,员工加班的小时数是不同的,所以每个人的加班费也是不同的,这里面“加班小时数”和“加班费”都是变量。计算过程如图3.10所示。
图3.10 加班费的计算过程
综上所述,变量也就是在程序运行时其值在不断发生改变的量,它在程序设计中是一个非常重要、非常关键的内容。
『名词解释』
变量:Visual Basic变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域。因此,每一个变量使用前必须先声明,然后进行赋值,才能使用(否则系统会自动赋予初始值)。
3.4.2 掌握变量的命名规则
为了便于在程序中区分和使用变量,必须给每一个变量进行命名。在Visual Basic中,变量的命名要遵循以下规则。
(1)变量名只能由西文字母、汉字、数字及下画线组成。
(2)变量名必须以西文字母或汉字开头,最后一个符号可以是数据类型声明符,如Dim a%,更多的数据类型声明符可以参考表3.1。
(3)变量名长度可达255个字符,有效字符为40个。
(4)Visual Basic 6.0中的关键字不能作为变量名。例如,Print、Dim和For等都是非法变量名。
学习手册
说明 虽然Visual Basic 6.0中的关键字不能作为变量名,但可以将关键字嵌入变量名中。例如,print是非法变量名,但print_3或print3都是合法的变量名。
(5)不能在变量名中出现标点符号、空格或者嵌入!、@、#、$、%、&等字符。
(6)变量名在变量有效的范围内必须是唯一的,否则会出现“当前范围内的声明重复”的错误。
(7)变量名中不区分大小写。
以上是变量的基本命名规则,在实际编程过程中,笔者建议变量名应能对变量的含义具有一定的提示作用,且能反映变量类型及变量作用域,这样可以增强程序代码的可读性。例如,可以将用来保存产品名称的变量命名为strName,保存产品价格的变量命名为curPrice,保存用户名的全局变量命名为gstrUserName。
3.4.3 声明变量
在Visual Basic 6.0程序中,使用变量前,一般要先声明变量的名称和变量的数据类型,以决定系统为变量分配的存储单元。下面介绍几种方式来声明变量及其数据类型。
1.用声明语句显式声明变量
使用声明语句声明变量,也称显式声明,语句格式如下:
Dim|Private|Static|Public变量名As数据类型
其中,变量名必须符合变量的命名规则,数据类型可以是Visual Basic 6.0的基本数据类型,也可以是记录类型或枚举类型。
关键字Dim、Private、Static和Public由符号“|”隔开,表示用户在实际声明变量中,可以从中任选其一。但选用不同的关键字,在程序的不同位置所定义的变量的种类和使用范围是不同的,这是3.4.4节将要介绍的内容。
【例3.7】 下面通过几个例子,介绍如何显式声明变量。
声明一个字符串变量、一个整型变量:
Dim Str As String Dim Int As Integer
使用数据类型的类型符号来替代As子句:
Dim Str$ Dim Int%
学习手册
注意 变量名与数据类型符之间不能有空格。
一条Dim语句可以声明多个变量,各变量之间以逗号隔开:
Dim Str As String , Int As Integer , Sng as Single
声明指定字符串长度的字符型变量:
Dim Str1 As String*128
如果赋给字符串变量Str1的字符少于128个,则用空格填充变量Str1;如果赋给字符串变量Str1的字符大于128,则Visual Basic会自动截去超出部分的字符。
2.隐式声明变量
在Visual Basic 6.0中,也可以不事先声明而直接使用变量,这种方式称为隐式声明。上述使用Dim语句声明变量的方式也可称为显式声明。所有隐式声明的变量都是变体型(Variant)数据类型,这一类型在3.3节中介绍过。
【例3.8】 声明一个变量a,并为a赋值,代码如下。
Dim a a=111
或直接使用:
a = 111
3.强制声明变量(Option Explicit语句)
前面介绍了变量的两种声明方式,显然隐式声明用起来更方便,但如果变量名拼错了,系统就会认为它是另一个新的变量,从而引起潜在的错误。这时如果设置了强制声明变量,就不会出现这种情况了。因为强制声明变量会在声明段手动或自动地加入Option Explicit语句,如果程序中存在直接使用的变量,运行程序后,系统就会提示“变量未定义”。
下面介绍如何强制声明变量。强制声明变量可以在声明段手动添加Option Explicit语句,但这种方法很费时,下面这种方法可以自动在声明段添加Option Explicit语句,方法是:选择“工具”→“选项”菜单命令,在“选项”对话框中,单击“编辑器”选项卡,勾选“要求变量声明”复选框,如图3.11所示,此时Visual Basic 6.0会在以后的窗体模块、标准模块及类模块中的声明段自动插入Option Explicit语句,如图3.12所示。但不会将它加入现有的模块中,要想在现有的模块中加入Option Explicit语句,还需要使用第一种方法,也就是在声明段手动添加Option Explicit语句。
图3.11 设置强制声明变量
图3.12 自动在声明段加入Option Explicit语句
学习手册
说明 如果要强制声明变量,建议在开始程序设计时就在“选项”中设置“要求变量声明”。
4.用DefType语句声明变量
用DefType语句可以在标准模块或窗体模块的声明部分定义变量,语句格式如下:
DefType 字母范围
其中,Def是保留字,Type是数据类型标志,它可以是Int(整型)、Lng(长整型)、Sng(单精度型)、Dbl(双精度型)、Cur(货币型)、Str(字符型)、Byte(字节型)、Bool(布尔型)、Date(日期型)、Obj(对象型)、Var(变体型)。把Def和Type写在一起就构成了定义的类型关键字。
字母范围用“字母-字母”的形式给出,例如:
DefLng i-l '凡是变量名以字母i到l开头的变量均定义为长整型
学习手册
注意 ① DefType语句只对它所在的模块起作用。
② 当使用DefType语句和使用类型说明符方式定义变量发生矛盾时,类型说明符定义变量的方式总是比DefType语句优先起作用。
3.4.4 变量的作用域
一个变量被声明后,并不是在任何地方都能使用。每个变量都有它的作用范围,也就是作用域。例如在一个过程内部声明的变量,只在该过程内部有效,一个模块的通用声明部分声明的变量,只在该模块内的所有过程有效,而对于使用Public语句声明的变量,不仅对于同一模块内的所有过程有效,甚至对于整个应用程序的所有过程也都是有效的。
在Visual Basic 6.0中允许在声明变量时指定它的范围,主要包括局部变量、模块级变量和全局变量,详细介绍如表3.2所示。
表3.2 变量的作用域
【例3.9】 下面通过实例比较局部变量和模块级变量的作用范围。创建一个Visual Basic 6.0工程,在窗体的Form_Load事件过程中定义一个整型变量,并为其赋值,然后在文本框控件中的值发生改变时,显示该变量的值,代码如下。
Private Sub Form_Load() Dim intNumber As Integer intNumber =2 End Sub Private Sub Text1_Change() intNumber = intNumber + 1 MsgBox intNumber End Sub
按【F5】键,运行程序,结果为1,由于变量intNumber是在Form_Load事件过程中定义的,因此决定它是一个局部变量,只在过程内部有效,而Text1_Change事件过程中的intNumber变量被当做一个新的变量,其初值为0,加1后结果为1。
将上述代码中的Dim intNumber As Integer语句移到窗体的通用声明部分,运行程序,再看一下结果,其结果为3,由于变量intNumber已被放在窗体的通用声明部分,因此决定它是一个模块级变量,即在模块内的所有过程有效。Form_Load事件过程中变量intNumber的值为2,在Text1_Change事件过程中变量intNumber再加上1,那么结果就是3。
3.4.5 理解静态变量的作用
在过程中,既可以使用Dim语句声明局部变量,也可以使用Static语句声明局部变量,并且Static语句的一般形式与Dim语句相同:
Static变量名As数据类型
使用Static语句声明的变量称为静态变量,它与用Dim语句声明的变量的不同之处在于:当一个过程结束时,过程中所用到的静态变量的值会保留,下次再调用该过程时,变量的初值是上次调用结束时被保留的值。
对于使用Dim语句声明的局部变量,随过程的调用而分配存储单元,并进行变量的初始化。一旦过程结束,变量的内容自动消失,占用的存储单元也被释放。因此,每次调用过程时,变量都将重新初始化。
3.4.6 处理变量同名问题
如果不同模块中的公用变量使用同一名字,则通过同时引用模块名和变量名在代码中进行区分。例如,如果在Form1和Module1中都声明了一个整型公用变量intNumber,则可以用Form1.intNumber和Module1.intNumber来区分这两个同名的变量。
实例位置:光盘文件\MR\ Instance\3\3.10
【例3.10】 下面通过实例进一步说明同名变量在程序中是如何区分的。
新建一个工程,在工程中添加三个窗体,默认名称为Form1、Form2和Form3。
在Form2中声明第一个变量intX,然后在Form_Load事件过程中设置它的值。
Public intNumber As Integer ' 声明Form2的intX变量 Private Sub Form_Load() intNumber=1 '设置Form2的intX变量的值 End Sub
在Form3中声明第二个变量intX,它与Form2中的变量名字相同,同样在Form_Load事件过程中设置它的值。
Public intNumber As Integer ' 声明Form3的intX变量 Private Sub Form_Load() intNumber=2 '设置Form3的intX变量的值 End Sub
在Form1窗体中添加两个按钮,在它们的Click事件过程中编写代码,分别调用Form2和Form3窗体,并将这两个窗体模块中定义的变量用MsgBox显示。
Private Sub Command1_Click() Form2.Show '调用Form2窗体 MsgBox Form2.intNumber ' 显示Form2窗体的intX变量 End Sub Private Sub Command2_Click() Form3.Show '调用Form3窗体 MsgBox Form3.intNumber ' 显示Form3窗体的intX变量 End Sub
按【F5】键,运行程序,单击两个命令按钮中的每一个按钮,将看到两个公用变量被分别引用。
3.4.7 情景应用——实现两个变量的交换(不借助第三个变量)
大家都知道,要想实现两个变量的交换需要借助第三个变量,比如:有一瓶红酒和一瓶可乐要交换,需要借助第三个瓶子。这里介绍一个不借助第三个变量来实现两个变量交换的方法(这两个变量是数值类型的)。下面通过一个实例讲解如何实现两个变量的交换(不借助第三个变量)。
实例位置:光盘文件\MR\ Instance\3\3.11
【例3.11】 当两个变量都为数值变量时,可以不借助第三个变量实现两个变量的交换。不借助第三个变量实现两个变量互换的算法为:首先将两个数的和减去b的值赋给b,这个值就是原来a的值,然后将两个数的和减去新得到的b的值赋给变量a,这个b的值是原来a的值,得到的值是原来b的值。程序的设计过程如下。
新建一个标准的exe工程。
在工程中创建一个窗体,使用窗体的默认名,设置窗体的Caption属性为“交换两个变量的值”。
在窗体上添加4个Label控件,设置Label1的Caption属性为“输入a和b的值”,Label2的Caption属性为“a”,Label3的Caption属性为“b”,Label4的Caption属性为空。将这几个Label控件的BackStyel属性设置为0-Transparent。
在窗体上添加两个TextBox控件,命名为Txt_a和Txt_b。设置Text属性为空。
在窗体上添加两个CommandButton控件,使用默认名,设置Caption属性为“交换”和“退出”。
当用户在文本框中输入两个变量的值,单击“交换”按钮,实现将两个变量的值交换,程序代码如下:
Private Sub exchange() '交换 Dim a As Integer ' 定义变量a Dim b As Integer ' 定义变量b If IsNumeric(Txt_a.Text)Then ' 如果输入的值是数值型数 a=Val(Txt_a.Text) '将其赋给变量a Else '否则 MsgBox"请输入数字!" '弹出提示对话框 Exit Sub '退出过程 End If If IsNumeric(Txt_b.Text)Then ' 如果输入的值是数值型的数 b=Val(Txt_b.Text) '将其赋给变量b Else '否则 MsgBox"请输入数字!" '弹出提示对话框 Exit Sub '退出过程 End If a=a+b '将两个数的和赋给a '将两个数的和减去b的值赋给b,这个值就是原来的a的值 b = a – b '将两个数的和减去新得到的b的值赋给变量a,这个b的值是原来a的值,得到的是值原来b的值 a = a – b Lbl_Info.Caption ="a的值是:"&a&" b的值是:"&b '在标签中输出交换的结果 End Sub
3.5 学习使用常量
专题讲座:光盘文件\MR\Video\3\常量.exe
视频速递:详细讲解常量的知识
熟悉了变量,接下来学习常量,常量与变量正好相反,它是程序设计时,值始终不发生改变的量。本节就常量的声明及使用进行介绍。
3.5.1 声明常量
当程序中有需要重复使用的常量时,可以使用Const语句声明,语法如下。
Public/Private Const<常量名>[As<数据类型>]=<常量表达式>
参数说明:
Public:可选的参数,用于声明可在工程的所有模块的任何过程中使用这个常量。
Private:可选的参数,用于声明只能在包含该声明的模块中使用常量。
常量名:必选的参数,用于指定该常量名称,必须是合法的Visual Basic标识符。
数据类型:可选的参数,也可以通过数据类型符号规定常量的类型。
常量表达式:必选的参数,包括常量和操作符,但不包含变量,而且计算结果总是常值。
学习手册
注意 在程序中如果改变已定义常量的值,则会出现错误提示。
例如:
Const PI As Single=3.14159265357 '声明符号常量PI代替3.14159265357 Print 3*PI '结果为:9.42477796071
编程准则:尽可能多的使用Const
Const关键字可以防止开发程序时错误的产生。例如,对于一些不需要改变的对象,使用Const关键字将其定义为常量,可以防止开发人员不小心修改对象的值,产生意想不到的结果。将函数返回的指针类型定义为Const指针,可以向其他人员表明不应该修改函数的返回值,如果不进行类型转换,显示地进行修改,会出现编译错误。如果在定义函数时,不希望在函数体中修改参数值,应使用Const关键字将参数定义为常量参数,防止用户修改参数值。
3.5.2 局部常量和全局常量
在模块级的声明中Public和Private省略的情况下,系统默认是Private。在模块中使用Public语句声明后的符号常量,就是一个全局常量,该常量可以在程序中所有模块的过程中使用。同样,用Private语句声明过的常量就是局部常量。
例如:
Const MyVar=123 '默认情况下常量是局部的 Public Const MyString="mr" ' 全局常量 Private Const MyInt As Integer=5 '声明局部整型常量 Const MyStr="mr",MyDouble As Double=3.1415 '在一行中声明多个常量
学习手册
注意 全局常量必须在标准模块中声明。
3.5.3 情景应用——使用自定义常量计算圆的面积
在开发程序的过程中经常会用到常量代表一个规定的值,这样可以做到一改全改的功能,使用方便,减少出错的几率。下面通过一个实例讲解如何使用常量进行程序开发。
实例位置:光盘文件\MR\ Instance\3\3.12
【例3.12】 本例实现了使用自定义常量计算圆的面积的功能。局部常量在所需要使用的过程中声明,并且只能应用在该过程中,只有当该过程被程序调用时,该常量才存在,过程结束后该常量也将被内存释放掉。本示例通过使用局部常量Pi计算一个圆的面积,将其结果显示在“立即”窗口中。程序的设计过程如下。
新建一个标准工程。
在工程中添加一个窗体,窗体的名称使用其默认名称,Caption属性设置为“计算圆的面积”,StartUpPosition属性设置为“2-屏幕中心”。
在窗体上添加一个Label控件、一个TextBox控件和一个CommandButton控件,用于显示、输入圆的半径,并计算圆的面积。
程序的运行代码如下。
单击窗体中的“计算”按钮,声明局部常量Pi,并使用常量Pi计算圆的面积,将结果在“立即”窗口中输出。代码如下:
Private Sub Command1_Click()
Const Pi=3.1415926 '声明局部常量
s=Pi*2^2 '使用常量进行计算
Debug.Print s '将结果输出到“立即”窗口
End Sub
程序的运行效果如图3.13和图3.14所示。
图3.13 输入圆的半径
图3.14 输出圆的面积
3.6 掌握运算符和表达式
专题讲座:光盘文件\MR\Video\3\运算符和表达式.exe
视频速递:详细讲解运算符和表达式的知识
在进行程序设计时,经常会进行各种运算,那么就会涉及一些运算符,而表达式是运算符和数据连接而成的式子。本章将详细介绍运算符和表达式在程序中的应用。
3.6.1 学会使用运算符
在Visual Basic 6.0中有4种运算符,分别是算术运算符、字符串运算符、关系运算符和逻辑运算符。
1.算术运算符
算术运算符按照优先级从高到低,依次为指数运算(∧),乘法(*)和除法/运算,求余数运算(Mod),整除运算(\),加法(+)和减法(-)运算,其中整除运算只求运算结果的整数部分,例如,在Visual Basic 6.0工程的“立即”窗口中输出5除以2,代码如下。
Private Sub Form_Load() Debug.Print 5 \ 2 End Sub
结果为:2
算术运算符的基本用法相信您已经学会了,下面介绍使用算术运算符时需要注意的事项。(1)当指数运算(∧)与负号(−)相邻时,负号(−)优先。
(2)运算符左右两边的操作数应是数值型数据,如果是数字字符或逻辑型数据,需要将它们先转换成数值数据后,再进行算术运算。
(3)在进行算术运算时,不要超出数据取值范围,对于除法运算,应保证除数不为零。
2.关系运算符
关系运算符用于比较运算符左右两侧表达式之间的大小关系,因此又称为比较运算符,它的运算结果为布尔型数据,即结果为True或者False,如果其中的任何一个表达式结果为NULL,则关系运算的结果还可以是NULL。关系运算符没有优先级的不同,因此在计算时,按照它们的出现次序,从左到右进行计算。Visual Basic 6.0中的关系运算符有:等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)和不等于(<>)。
另外,还要说明两点:
(1)对于字符型数据的比较,如果直接比较单个字符,则比较两个字符的ASCII码的大小,而对于两个汉字字符,则比较两个汉字字符的区位码。
如果比较两个字符串,则从关系运算符的左边字符串的第1个字符开始,逐一对右边字符串的对应位置上的字符进行比较(即比较对应位置上的字符的ASCII码),其中ASCII码值较大的字符所在的字符串大。
常见的字符值的大小比较关系如下:
“空格”<“0”<……<“9”<“A”<……<“Z”<“a”<……<“z”<“所有汉字”
(2)赋值号“=”与关系运算符“=”的区别
在书写上它们没有什么区别,只是含义与作用不同。赋值号“=”专用于给变量、对象属性、数组等赋值,赋值号左边必须是变量名、对象属性、数组等,不能为常量或表达式。
而关系运算符“=”用于比较两个表达式的值是否相等。关系运算符“=”的左右两边都可以是常量、变量或表达式。用关系运算符“=”连接形成的关系表达式不能单独作为一条语句出现在程序中,它只能出现在其他语句或表达式中。
例如:
x=10 y=10 z=(x+10=y-100)
其中,前三个“=”都是赋值号,第3行语句中括号内的“=”是关系运算符。
3.连接运算符
连接运算符有两个,它们是“+”和“&”。其中,“&”连接运算符用于强制将两个表达式作为字符串连接。而“+”连接运算符则与它不同,当两个表达式都为字符串时,将两个字符串连接;如果一个是字符串而另一个是数字,则进行相加,结果为两个数字相加的和。
下面举例说明连接运算符的用法。
a=2+3 'a值为5
a="2"+"3" 'a值为“23”
a="吉林省"&"长春市" 'a值为“吉林省长春市”
a="a1"+3 '出现“类型不匹配”的错误提示信息
a="a1"&3 'a值为“a13”
学习手册
注意 变量名与“&”之间一定要加一个空格。因为“&”本身还是长整型数据类型的类型符,不加空格容易出现视觉和理解上的误差。
4.逻辑运算符
逻辑运算符包含下列运算符,将它们按照运算优先级由高到低排列为:
逻辑非(Not)、逻辑与(And)、逻辑或(Or)、逻辑异或(Xor)、逻辑等于(Eqv)及逻辑蕴涵(Imp)。逻辑运算得出的结果是布尔型值,也就是True或False。
3.6.2 了解表达式的构成
前面我们简单地介绍了表达式是运算符和数据连接而成的式子,那么具体地说表达式就是由常量、变量、运算符、圆括号、函数等连接形成的一个有意义的运算式子。它包括算术表达式、字符串表达式、日期表达式、关系表达式和逻辑表达式。
在书写表达式时,应注意以下几点:
(1)表达式中所有的符号都必须一个一个并排写在同一横线上,不能写成上标或下标的形式。例如,数学上的22在Visual Basic 6.0中要写成2∧2的形式。
(2)不能省略乘号,乘号“*”必须写。
(3)表达式中所有的括号一律使用圆括号,并且括号左右必须配对。
(4)数学表达式中表示特定含义的符号要写成具体的数值,如π要写成3.1415926(根据精度取小数点后的位数)。
3.6.3 运算符的优先级
一个表达式中,通常包含一种或多种运算符,这时系统会按预先确定的顺序进行计算,这个顺序称为运算符的优先级。
算术运算符→连接运算符→关系运算符→逻辑运算符
学习手册
说明 各种运算符的优先级已在讲解各个运算符时介绍了,这里不再赘述。
3.7 熟悉代码编写规则
代码编写规则是养成良好编程习惯的基础。本节主要介绍代码编写规则,包括对象命名规则、代码书写规则、处理关键字冲突和代码注释规则。
3.7.1 对象命名规则
当为对象、属性、方法及事件命名时,应选择易于被用户理解的名字。名字含义越清晰,代码的可用性越强。
这里的对象命名规则适用于:
◆ 对象;
◆ 组成对象接口的属性、方法及事件;
◆ 属性、方法及事件的命名参数。
具体命名规则如下。
(1)尽可能使用完整的单词或音节。
对用户来说,记住整个单词比记住缩略词更容易,例如,Window被缩略为Wind、Wn或Wnd,不如Window本身好记。下面通过两个例子说明推荐使用的对象名称,如表3.3所示。
表3.3 推荐使用的对象名称(1)
如果标识符太长而需要缩略时,则尽量用完整的首音节。例如,用AltExpEval,而不用Alternate ExpressionEvaluation或AltExpnEvln。
(2)大小写混用。
所有标识符都应混用大小写,而不是用下画线来分割其中的单词。下面通过两个例子说明推荐使用的对象名称,如表3.4所示。
表3.4 推荐使用的对象名称(2)
(3)使用一致的术语。
使用与接口相同的单词,不要使用诸如HWND之类的基于匈牙利命名法的标识符命名。记住,这些代码是要被其他用户访问的,因此尽量使用描述一个概念时用户可能会采用的单词。
(4)集合类名使用正确的复数。
对集合采用复数而不用新的名称可以减少用户必须记忆项的数目。这样也简化了对集合的命名。如表3.5所示列出了集合类名称的一些例子。
表3.5 推荐使用的对象名称(3)
例如,如果有一个名为Axis的类,则Axis对象的集合存储在Axes类中。同样,Vertex对象的集合存储在Vertices类中。极少情况下当单数和复数的拼写一样时,则在其后面添加一个Collection,例如SeriesCollection。
学习手册
注意 此命名约定可能不适用于某些集合,尤其在一组对象存在于多个集合时。例如,Mail程序可能有一个Name对象存在于多个集合中:ToList、CcList等。在这种情况下,可以将这些独立的name集合命名为ToNames和CcNames。
(5)常数使用前缀。
选择三四个小写字母组成标识部件的前缀,把它用在部件类型库中部件提供的常数名上,以及定义那些常数的Enums名上。
例如,提供贷款评估的代码可以使用levs作为前缀。下面贷款的枚举类型Enum使用了该前缀。(此外,这些常数包含大写字母LT,以标识它们所属的枚举。)
Public Enum LoanType levsLT Mortgage=1 levsLT Commercial levsLT Consumer End Enum
(6)“动词/对象”和“对象/动词”。
如果创建的方法名是一个动词及其作用的对象名的组合,则次序必须保持一致。或者在所有情况下都将动词放在对象前面,如InsertWidget和InsertSprocket;或者总是将对象放在前面,如WidgetInsert和SprocketInsert。
两种方法各有所长。“动词/对象”次序创建的名称更像日常说法,因而能更好地表示此方法的意图。而“对象/动词”的次序则便于将影响某一特定对象的所有方法集合到一起。
3.7.2 代码书写规则
代码书写规则如下:
(1)可将单行语句分成多行。
可以在“代码”窗口中用续行符“ _ ”(一个空格后面跟一个下画线)将长语句分成多行。由于使用续行符,无论在计算机上还是打印出来的代码都变得易读。例如,声明一个API函数,代码如下。
'声明API函数用于异步打开一个文档 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (By Val hwnd As Long,_ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ By Val nShowCmd As Long)As Long
学习手册
注意 在同一行内,续行符后面不能加注释。
(2)可将多个语句合并写到同一行。
通常,一行之中有一个Visual Basic语句,而且不用语句终结符。但是也可以将两个或多个语句放在同一行,只是要用冒号“:”将它们分开。例如,给数组连续赋值,其代码如下。
a(0) = 11: a(1) = 12: a(3) = 13: a(4) = 14: a(5) = 15: a(6) = 16
(3)可在代码中添加注释。
以Rem或“'”(单引号)开头,Visual Basic就会忽略该符号后面的内容。这些内容就是代码段中的注释,既方便开发者也为以后可能检查源代码的其他程序员提供方便。例如为下面的代码添加注释:
Dim a As String '定义一个字符型变量 Dim a As String : Rem定义一个字符型变量
学习手册
注意 如果在语句行后使用Rem关键字,则必须在语句后使用冒号“:”与Rem关键字隔开,而且Rem关键字与注释文字间要有一个空格。
(4)在输入代码时不区分大小写。
(5)一行最多允许输入255个字符。
3.7.3 处理关键字冲突
在代码的编写中为避免Visual Basic中元素(Sub和Function过程、变量、常数等)的名字与关键字发生冲突,它们不能与受到限制的关键字同名。
受到限制的关键字是在Visual Basic中使用的词,是编程语言的一部分。其中包括预定义语句(比如If和Loop)、函数(比如Len和Abs)和操作符(比如Or和Mod)。
窗体或控件可以与受到限制的关键字同名。例如,可以将某个控件命名为If。但在代码中不能用通常的方法引用该控件,因为在Visual Basic中If意味着关键字。例如,下面这样的代码就会出错。
If.Caption=“同意” '出错
为了引用那些与受到限制的关键字同名的窗体或控件,就必须限定它们,或者将其用方括号“[ ]”括起来。例如,下面的代码就不会出错。
MyForm.If.Caption=“同意” '用窗体名将其限定 [If].Caption=“同意” '方括号起了作用
3.7.4 了解代码注释规则
注释是一种非执行语句,它不仅仅是对程序的解释说明,同时还对程序的调用起着非常重要的作用。如利用注释来屏蔽一条语句,当程序再次运行时,可以发现问题或错误。这样大大提高了编程速度,减少了不必要的代码重复。代码注释规则如下:
(1)程序功能模块部分要有代码注释,简洁明了地阐述该模块的实现功能。
(2)程序或模块开头部分要有以下注释:模块名、创建人、日期、功能描述等。
(3)在给代码添加注释时,尽量使用中文。
(4)用注释来提示错误信息以及出错原因。
下面介绍几种注释的方法。
1.利用代码或语句添加注释
在Visual Basic中使用“'”符号或“Rem”关键字,可以为代码添加注释信息。“'”符号可以忽略掉后面的一行内容,这些内容是代码段中的注释。这些注释主要是为了以后查看代码时,帮助用户快速理解该代码的内容。注释可以和语句在同一行出现,并写在语句的后面,也可以独自占据一整行。
(1)注释占据一行,在需要解释的代码前。
'为窗体标题栏设置文字 Me.caption="明日科技" Rem在文本框中放欢迎词 Text1.Text = "欢迎您使用本软件!!!"
(2)注释和语句在同一行并写在语句的后面。
Me.caption="明日科技" '为窗体标题栏设置文字 Text1.Text="欢迎您使用本软件!!!": Rem在文本框中放欢迎词
(3)注释占据多行,通常用来说明函数、过程等的功能信息。通常在说明前后使用注释和“=”、“*”符号强调。例如下面的代码:
'========================================================== '名称:CalculateSquareRoot '功能:求平方根 '日期:2008-03-02 '单位:mingrisoft '========================================================== Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg<0 Then ' 评估参数 Exit Function '退出调用过程 Else CalculateSquareRoot =Sqr(NumberArg) '返回平方根 End If End Function
2.利用工具栏按钮为代码添加注释
为了方便对大段程序进行注释,可以通过选中两行或多行代码,并在“编辑”工具栏上单击“设置注释块”按钮或“解除注释块”按钮来对大段代码块添加或解除注释符号“'”。设置或取消连续多行的代码注释块的步骤如下。
在工具栏上单击鼠标右键,在弹出的菜单中选择“编辑”命令,将“编辑”工具栏添加到窗体工具栏中。
选中要设置注释的代码,然后单击“编辑”工具栏中的“设置注释块”按钮,如图3.15所示。也可以将光标放置在需要注释的代码所在行,单击“设置注释块”按钮即可。
图3.15 编辑工具栏
【例3.13】 下面使用注释块注释代码。选中需要注释的代码,单击“设置注释块”按钮,即可将选中的代码全部注释,注释后的效果如下。
'Private Sub Command1_Click() ' Command2.Enabled=True ' Command1.Enabled=False 'End Sub
“解除注释块”按钮与“设置注释块”按钮功能正好相反,主要用于清除选中代码前的“'”符号,从而解除该代码块的注释。
学习手册
注意 在使用注释符号“'”时,不能将注释符号“'”放在“_”续行符之后。
3.8 实战练习
3.8.1 用“+”运算符进行加法和串联字符串
难度系数:★★★
题目描述
在本章介绍了大量常用的运算符,其中,“+”运算符有两种功能,一种是用于数值型数据的相加;另一种是用于连接字符串,本练习尝试开发一个程序,要求使用“+”运算符进行加法运算和串联字符串,效果如图3.16所示。
图3.16 加法运算和串联字符串
技术指导
对于数值的相加很简单,就是在“+”运算符的左右两侧放置被加数和加数;对于连接两个字符串也并不难,也是在“+”运算符的左右两侧放置两个要连接的字符串,示例代码参考如下:
Text1.Text=45+45 '两个整数相加 Text2.Text="45"+"45" '两个字符串相连
紧急救援
如果您在做本例题的过程中遇到困难或疑惑,可以按照下面救援通道提供的网址获取本例题的源码和技术文档。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.1
3.8.2 使用公用变量记录当前登录用户
难度系数:★★★★
题目描述
在本章介绍了变量和变量的作用域,每个变量都有它的作用范围,在一个过程内部声明的变量,只在该过程内部有效,一个模块的通用声明部分声明的变量,只在该模块内的所有过程有效,而对于使用Public语句声明的变量,不仅对于同一模块内的所有过程有效,甚至对于整个应用程序的所有过程也都是有效的。
本练习尝试开发一个程序,要求使用公用变量记录当前登录用户,然后在加载下一个窗体的时候将登录用户的名称显示出来。本例要求在登录窗体中输入用户名,在主窗体中显示用户名。程序的运行效果如图3.17和图3.18所示。
图3.17 输入正确的用户名与密码
图3.18 显示Form2窗体
技术指导
该程序首先要在登录窗体的代码编辑区域声明一个公有变量(全局变量),然后将文本框中输入的用户名信息赋给该公有变量,最后在加载主窗体的时候调用该公有变量即可。
公有变量的声明和示例代码参考如下:
Public c As String Private Sub Command1_Click() Dim a As String, b As String a = "mr" b = "mrsoft" If Text2.Text = b And Text1.Text = a Then c = Text1.Text Form2.Show End If End Sub
紧急救援
如果您在做本例题的过程中遇到困难或疑惑,可以按照下面救援通道提供的网址获取本例题的源码和技术文档。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.2
3.8.3 正确使用“&”和“+”
难度系数:★★★★
题目描述
字符串运算符有两个:“&”和“+”。“&”用来强制两个表达式做字符串连接。“+”用来求两个数之和。如果无法确定是做加法还是做字符串连接,为了避免混淆,应使用“&”运算符进行字符串连接。
技术指导
使用运算符“&”时应注意,变量与运算符“&”间应加一个空格,否则Visual Basic先把“&”作为类型定义处理,造成“缺少语句结束”的错误。
Dim Mystr Mystr="mingri"&"soft" '返回“mingrisoft” Mystr="您的分数为"&100&"分" '返回“您的分数为100分” Mystr=1000&1 ' 返回“10000001”
使用“+”运算可以实现字符串的串界操作。但最好还是使用“&”运算符。因为如果“+”运算符两边的表达式中数据类型不一致时会报错。如果都是字符串做“相加”,则返回串接起来的字符串。
Dim Mystr, a, b As String a =1000 b ="a1001" Mystr="mingri"&"soft" '返回“mingrisoft” Mystr="mingri"+"soft" '返回“mingrisoft” Mystr="您的分数为"+100+"分" '出错,不允许数字与字符串使用“+”连接 Mystr=a+100+b '出错,不允许数字与字符串使用“+”连接 Mystr=a+100 ' 返回1100 Mystr= 分数100+100 ' 返回100 Mystr=1000&1 ' 返回“10000001” Mystr="1000"+"0001" ' 返回“10000001” Mystr=1000+1 ' 返回“1001”
紧急救援
如果您在做本例题的过程中遇到困难或疑惑,可以按照下面救援通道提供的网址获取本例题的源码和技术文档。
救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/3.8.3
3.9 本章小结
本章主要介绍了关键字、标识符、数据类型、变量、常量、运算符、表达式和代码编写规则。读者应重点掌握变量,它是程序设计的关键内容,另外,良好的编程习惯也是必不可少的。