Visual Basic学习手册
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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中要写成22的形式。

(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 本章小结

本章主要介绍了关键字、标识符、数据类型、变量、常量、运算符、表达式和代码编写规则。读者应重点掌握变量,它是程序设计的关键内容,另外,良好的编程习惯也是必不可少的。