
1.3 Visual Basic程序设计的基本概念
传统的编程方法使用的是面向过程、按顺序进行的机制,其缺点是程序员始终要关心什么时候发生什么事情,处理Windows环境下的事件驱动方式工作量太大。VB采用的是面向对象、事件驱动编程机制,程序员只需编写响应用户动作的程序,如移动鼠标、单击事件等,而不必考虑按精确次序执行的每个步骤,编写代码相对较少。另外,VB提供的多种控件可以快速创建强大的应用程序而不需涉及不必要的细节。
1.3.1 可视化编程与事件驱动编程
VB使用的“可视化编程”方法,是“面向对象编程”技术的简化版。在VB环境中所涉及的窗体、控件、部件和菜单项等均为对象,程序员不仅可以利用控件来创建对象,而且还可以建立自己的控件,这是Windows环境下的编程新概念。
利用可视化编程,程序员通过对鼠标进行单击操作就能够创建图形用户界面(GUI)。可视化编程使程序员免于编写许多代码,如用来生成窗体的代码、用于窗体属性的代码、确定窗体在屏幕中位置的代码、在窗体中创建和放置一个标签的代码、改变窗体颜色的代码等。所有这些代码都将作为工程的一部分。非专业的Windows程序员也可以创建具有各种功能的Windows程序。程序员创建GUI,并编写代码来描述用户与这个GUI交互时(单击、按键、双击等)所发生的事件,这些称为事件的内容是由Windows操作系统传递给程序的。
编写响应这些事件的代码称为事件驱动编程。利用事件驱动编程,用户(不是程序员)可以指明程序执行的顺序。实际上是用户“驱动”程序,而不是程序“驱动”用户,这样计算机将变得更加“友好”。例如网页浏览器,当打开一个网页浏览器时,可默认设置为载入或者不载入网页。当载入网页后,它只是“保持”在那里,不进行任何操作,浏览器处于这种事件监听状态(即监听事件)。如果用户按下了某个按钮,浏览器就开始执行某个相关的动作,但只要它执行完这个动作,就会继续处于监听状态,用户的动作决定了浏览器的动作。
1.3.2 对象的属性、事件和方法
在现实生活中,任何实体都可以视为对象(Object)。如一只气球是一个对象,一台计算机也是一个对象。一台计算机又可拆成主板、CPU、内存、外设等,这些部件又都分别是对象,因此计算机对象可以说是由多个“子”对象组成的,即是一个容器(Container)对象。
在VB中,常用的对象有工具箱中的控件、窗体、菜单、应用程序的部件以及数据库等。从可视化编程的角度来看,这些对象都具有属性(数据)和行为方式(方法)。简单地说,属性用于描述对象的一组特征,方法为对象实施一些动作,对象的动作则常常要触发事件,而触发事件又可以修改属性。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。
1.对象的属性
每个对象都有一组特征,称之为属性。不同的对象有不同的属性,如小孩玩的气球所具有的属性包括可以看到的一些性质,如它的直径、颜色以及描述气球状态的属性(充气的或未充气的)。还有一些不可见的性质,如它的寿命等。通过定义,所有气球都具有这些属性,当然这些属性也会因气球的不同而不同。
在可视化编程中,每一种对象都有一组特定的属性。有许多属性可能为大多数对象所共有,如BackColor属性定义对象的背景色。还有一些属性只局限于个别对象,如只有命令按钮才有Cancel属性,该属性用来确定命令按钮是否为窗体默认的取消按钮。
每一个对象属性都有一个默认值,如果不明确地改变该值,程序就将使用它。通过修改对象的属性能够控制对象的外观和操作。对象属性的设置一般有两条途径。
1)选定对象,然后在属性窗口中找到相应属性直接设置。这种方法的特点是简单明了,每当选择一个属性时,在属性窗口的下部就显示该属性的一个简短提示,缺点是不能设置所有所需的属性。
2)在代码中通过编程设置,格式为
对象名.属性名=属性值
如下述代码可以设置标签控件Label1的标题为“轻轻松松学用VB6.0”:
Label1.Caption="轻轻松松学用VB6.0"
2.对象的事件
事件(Event)就是对象上所发生的事情。在VB中,事件是预先定义好的、能够被对象识别的动作,如单击(Click)事件、双击(DblClick)事件、装载(Load)事件、鼠标移动(MouseMove)事件等,不同的对象能够识别不同的事件。当事件发生时,VB将检测两条信息,即发生的是哪种事件和哪个对象接收了事件。
每种对象能识别一组预先定义好的事件,但并非每一种事件都会产生结果,因为VB只是识别事件的发生。为了使对象能够对某一事件做出响应(Respond),就必须编写事件过程。
事件过程是一段独立的程序代码,它在对象检测到某个特定事件时执行(响应该事件)。一个对象可以响应一个或多个事件,因此可以使用一个和多个事件过程对用户或系统的事件做出响应。程序员只需编写必须响应的事件过程,而其他无用的事件过程则不必编写,如命令按钮的“单击”(Click)事件比较常见,其事件过程需要编写,而其MouseDown或MouseUp事件则可有可无,程序员可根据需要选择。
3.对象的方法
一般来说,方法就是要执行的动作。上面所述的气球本身就具有其固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。用户对具体实现过程并不关心,关键是最终收到的效果。
VB的方法与事件过程类似,它可能是函数,也可能是过程,它用于完成某种特定功能而不能响应某个事件。如对象打印(Print)方法、显示窗体(Show)方法、移动(Move)方法等。每个方法完成某个功能,但其实现步骤和细节用户既看不到、也不能修改,用户能做的工作就是按照约定直接调用它们。
方法只能在代码中使用,其用法依赖于方法所需的参数的个数以及它是否具有返回值。当方法不需要参数并且也没有返回值时,可用下面的格式调用对象方法:
对象名.方法名
如图片框Picture1有刷新显示方法Refresh,在事件过程代码中调用该方法的代码为
Picture1.Refresh
1.3.3 Visual Basic的编程环境
1.集成开发环境介绍
启动VB后,出现“新建工程”对话框,如图1-5所示。

图1-5 “新建工程”对话框
使用VB开发的应用程序或其他程序都被称为“工程”。选择“新建”选项卡可以建立一个新的工程,选择“现存”选项卡可以打开原来已有的工程,选择“最新”选项卡可以打开最近建立或使用过的工程。
在“新建”选项卡中选中“标准EXE”选项,然后单击“打开”按钮,出现集成开发环境的主界面,如图1-6所示。

图1-6 VB 6.0集成开发环境
VB 6.0集成开发环境除了具有标准Windows环境的标题栏、菜单栏、工具栏外,还有工具箱、属性窗口、工程管理器窗口、窗体设计器、立即窗口、窗体布局窗口等开发工具。
(1)标题栏和菜单栏
标题栏中显示的有窗体控制菜单图标、当前激活的工程名称、当前工作模式以及最小化、最大化/还原、关闭按钮。
菜单栏中显示了“文件”“编辑”“视图”“工程”“格式”等菜单项,其中包含了VB编程的常用命令。单击菜单栏中的菜单名,即可打开下拉菜单。在下拉菜单中显示了各种功能子菜单,包含执行该项功能的热键和快捷键。
(2)工具栏及数字显示区
在菜单栏的下面是工具栏,工具栏提供了许多常用命令的快速访问按钮。单击某个按钮,即可执行对应的相关操作。
VB集成开发环境中的默认工具栏是“标准”工具栏,对准菜单栏或工具栏右击,弹出工具栏快捷菜单,可进行标准、编辑、窗体编辑器和调试等工具栏的显示/隐藏的切换。工具栏可以紧贴在菜单栏之下,也可拖放到窗体的其他任何地方。“标准”工具按钮见表1-2。
表1-2 “标准”工具按钮

数字显示区包含两部分,左数字区显示的是对象的坐标位置(窗体工作区的左上角为坐标原点,即(0,0)位置),右数字区显示的是对象的高度(向下递增)和宽度,即对象的大小。
2.控件工具箱
新建或打开“标准EXE”工程时,VB将同时打开控件工具箱。
VB的控件工具箱包含了建立应用程序所需的各种控件,如图1-7a所示。另外,VB还提供了很多ActiveX控件。使用这些控件有两种方法:一是向工具箱中添加需要的控件,二是自己定义一张“选项卡”。
(1)添加ActiveX控件
向工具箱中添加ActiveX控件的步骤如下:
1)在工具箱的空白处右击。在弹出的快捷菜单中选择“部件”命令,或选择“工程”菜单中的“部件”菜单命令,弹出“部件”对话框,如图1-7b所示。
2)在“部件”对话框中选中所需要的控件,然后单击“确定”按钮退出,所选择的控件即可添加到工具箱中。
要删除工具箱中的ActiveX控件,按照上述操作去掉选中标志即可。

图1-7 控件工具箱与“部件”对话框
a)控件工具箱 b)“部件”对话框
(2)定义选项卡
VB 6.0与早期版本的工具箱的主要差别是:可以定义选项卡来组织、安排控件。按照下列操作步骤可将一些常用控件保存在一张单独的选项卡上。
1)在工具箱的空白处右击。
2)在弹出的快捷菜单中选择“添加选项卡”命令。
3)在打开的“新选项卡名称”对话框中输入选项卡名称,如ww,如图1-8所示。然后单击“确定”按钮退出。

图1-8 输入选项卡名称
4)按住鼠标左键将所需的控件拖到创建的选项卡ww上,如图1-9所示。

图1-9 添加控件到选项卡
5)用同样的方法可以添加多个选项卡。单击选项卡名称可在不同的选项卡之间切换。
3.工程窗口
应用程序是建立在工程的基础上完成的,而一个工程则是各种类型文件的集合。这些文件包括工程文件(Vbp)、窗体文件(Frm)、二进制数据文件(Frx)、类模块文件(Cls)、标准模块文件(Bas)、资源文件(Res)和包含ActiveX控件的文件(Ocx)。
工程文件就是与该工程有关的所有文件和对象的清单,这些文件和对象自动链接到工程文件上,每次保存工程时,其相关文件信息随之更新。当然,某个工程下的对象和文件也可供其他工程共享使用。在工程的所有对象和文件被汇集在一起并完成编码以后,就可以编译工程,生成可执行文件。
“工程窗口”类似于Windows下的资源管理器,在这个窗口中列出了当前工程中的窗体和模块,其结构用树状的层次管理方法显示,如图1-10所示。

图1-10 工程窗口
在工程窗口中有“查看代码”“查看对象”和“切换文件夹”三个按钮。单击“查看代码”按钮可打开“代码编辑器”查看代码,单击“查看对象”按钮可打开“窗体设计器”查看正在设计的窗体,单击“切换文件夹”按钮则可隐藏或显示包含对象文件夹中的个别项目列表。
4.属性窗口
在VB集成环境的默认视图中,属性窗口位于工程窗口的下面。按<F4>键,或单击工具栏中的“属性窗口”按钮,或选择“视图”菜单中的“属性窗口”命令,均可打开属性窗口,如图1-11所示。

图1-11 属性窗口
“属性窗口”包含选定对象(窗体或控件)的属性列表,在设计程序时可通过修改对象的属性设计其外观和相关数据,这些属性值将是程序运行时各对象属性的初始值。“属性窗口”的内容包括:
●对象下拉列表框:标识当前选定对象的名称以及所属的类。单击右侧的下拉箭头,可列出当前窗体及所包含的全部对象的名称,可从中选择要更改其属性的对象。
●选项卡:可按字母序和分类序两种方式显示所选对象的属性。
●属性列表:左列显示所选对象的所有属性名,右列可以查看和修改属性值。有的属性取值具有预定值,如右侧显示“...”式按钮或下拉箭头式按钮,都有预定值可供选择。在“属性”列表中双击属性值可以遍历所有选项。选择任一属性并按<F1>键可得到该属性的帮助信息。
●属性说明:显示所选属性的简短说明。可通过右键快捷菜单中的“描述”菜单来切换显示或隐藏“属性说明”。
5.窗体设计器
“窗体设计器”也称为“对象窗口”,主要用来在窗体上设计应用程序的界面。窗体中的对象(控件)可随意在窗体上移动或改变大小,但锁定控件后则不可随意修改。工程中的每一个窗体都有自己的窗体设计器窗口,如图1-12a所示。
在窗体的空白区域右击,将弹出快捷菜单,可切换到“代码窗口”“菜单编辑器”“属性窗口”,还可以选择“锁定控件”和“粘贴”命令,如图1-12b所示。

图1-12 窗体设计器窗口
a)窗体设计器 b)快捷菜单
6.代码窗口
“代码窗口”又称“代码编辑器”,各种通用过程和事件过程代码均在此窗口上编写和修改。有四种方法可打开“代码窗口”:
●双击窗体的任何地方。
●右击窗体,在弹出的快捷菜单中单击“查看代码”。
●单击工程窗口中的“查看代码”按钮。
●选择“视图”菜单中的“代码窗口”命令。
在“代码窗口”中有“对象下拉列表框”“过程下拉列表框”和“代码区”,如图1-13a所示。
“对象下拉列表框”中列出了当前窗体及所包含的全体对象名。其中,无论窗体的名称改为什么,作为窗体的对象名总是“Form”。
“过程下拉列表框”中列出了所选对象的所有事件名。
“代码区”是程序代码编辑区,能够非常方便地进行代码的编辑和修改。另外,它还有自动列出成员特性,能够自动列举适当的属性值、方法或函数原型等性能如图1-13b所示,这一性能使代码编写更加方便。

图1-13 代码窗口
a)代码区 b)成员特性
1)自动列出成员特性:要输入控件的属性和方法时,在控件名后输入小数点,VB就会自动显示一个下拉列表框,其中包含了该控件的所有成员(属性和方法),如图1-13b所示。依次输入属性名的前几个字母,系统会自动检索并显示出需要的属性。
从列表中选中该属性名,按<Tab>键完成这次输入。当不熟悉控件有哪些属性时,这项功能是非常有用的。
如果系统设置禁止“自动列出成员”特性,可使用快捷键<Ctrl+J>获得这种特性。
2)自动显示快速信息:该功能可显示语句和函数的语法格式。在输入合法的VB语句或函数名之后,代码窗口中在当前行的下面自动显示该语句或函数的语法,如图1-14所示。语法格式中,第一个参数为黑体字,输入第一个参数之后,第二个参数又出现,也是黑体字。

图1-14 快速显示信息
“自动快速显示信息”功能可以使用快捷键<Ctrl+I>获得。
3)自动语法检查:在VB中可自动检查语句的语法。当输入某行代码后按<Enter>键,如果系统出现语法错误,VB会显示警告提示框,同时该语句变成红色,如图1-15所示。

图1-15 自动语法检查
在“代码窗口”的左下角有两个按钮:“过程查看”和“全模块查看”按钮。单击“过程查看”按钮,一次只查看一个过程;单击“全模块查看”按钮可查看程序中的所有过程。这两个按钮可切换“代码窗口”的两种查看视图。
7.立即窗口
使用立即窗口可以在中断状态下查询对象的值,也可以在设计时查询表达式的值或命令的结果,如图1-16a所示。图1-16a中前三行是输入的命令,第四行是输出的结果。
还可在程序中使用Debug对象,把运行结果输出到立即窗口,例如程序中有如下代码:

代码的运行结果如图1-16b所示。

图1-16 立即窗口
8.窗体布局窗口
如图1-17所示的窗口即是窗体布局窗口。窗体布局窗口中有一个表示屏幕的小图像,用来布置应用程序中各窗体的位置,使用鼠标拖动窗体布局窗口中的小窗体图标,可方便地调整程序运行时窗体显示的位置。

图1-17 窗体布局窗口
1.3.4 Visual Basic的窗体与控件
1.Visual Basic的窗体
窗体(Form)也就是平时所说的窗口,它是VB编程中最常见的对象,也是程序设计的基础。各种控件对象必须建立在窗体上,一个窗体对应一个窗体模块。
(1)窗体的结构
同Windows环境下的应用程序窗口一样,VB中的窗体也具有控制菜单、标题栏、最大化/复原按钮、最小化按钮、关闭按钮以及边框,如图1-18所示。用鼠标左键按住标题栏拖动可以移动窗体,鼠标对准窗体边框出现双向箭头时拖动鼠标可以改变窗体的大小。

图1-18 窗体的结构
窗体的控制菜单用来在程序运行时显示控制菜单,通过属性设置,可将程序运行时窗体上的标题栏隐藏起来。
(2)窗体的创建
虽然建立新工程时系统会自动创建一个窗体,但除了简单的练习外,真正的商业化的应用程序均需要使用多个窗体,创建新窗体是应用程序开发过程中必不可少的步骤之一。创建新窗体的操作步骤如下:
1)选择“工程”菜单中“添加窗体”命令。
2)默认情况下系统将显示如图1-19a所示的“添加窗体”对话框。
3)该对话框的“新建”选项卡用于创建一个新窗体,列表框中列出了各种新窗体的类型,其中选择“窗体”选项时,建立一个空白的新窗体,选择其他选项时则建立一个预定义了某些功能的窗体。
4)单击“打开”按钮,一个新的空白窗体被加入到当前工程中,同时会显示在屏幕上,如图1-19b所示。

图1-19 创建新窗体
a)“添加窗体”对话框 b)新建的空白窗体
建立新窗体后,它的大小、背景颜色、标题及窗体名称等特征可以根据应用程序的需要在属性设置窗口中设置完成。
(3)窗体的属性
通过修改窗体的属性可以改变窗体内在或外在的结构特征,控制窗体的外观。常用的窗体属性见表1-3。
表1-3 常用的窗体属性

另外还有用来设置字形的属性,如FontName、FontSize、FontItalic等,设置位置与大小的属性,如Top、Left、Height、Width,属于公共的属性,将在后面的章节介绍。
(4)窗体的事件
与窗体有关的事件较多,常用的窗体事件如表1-4所示。
表1-4 常用的窗体事件

(5)窗体的方法
窗体的方法较多,充分利用这些方法,可以提高程序的开发能力。常用的方法见表1-5。
表1-5 常用的窗体方法

2.Visual Basic的控件
控件是VB中预先定义好的、程序中能够直接使用的对象,每个控件都有大量的属性、事件和方法可在设计时或在代码中修改和使用。利用控件编程使程序员免除了大量重复性的工作,能够以最快的速度和效率开发具有良好用户界面的应用程序。
VB中的控件通常分为三种类型:
标准控件:在默认状态下工具箱中显示的控件都是标准控件(或称内部控件),这些控件被“封装”在VB的EXE文件中,不可从工具箱中删除。如命令按钮、单选按钮、复选框等控件。
ActiveX控件:这类控件单独保存在ocx类型的文件中,其中包括各种版本VB提供的控件,如数据绑定网格、数据绑定组合框等和仅在专业版和企业版中提供的控件,如标准公共对话框控件、动画控件和MCI控件等,另外也有许多软件厂商提供的ActiveX控件。
可插入的对象:用户可将Excel工作表或PowerPoint幻灯片等作为一个对象添加到工具箱中,编程时可根据需要随时创建。
(1)标准控件
工具箱中的每个控件都用一个图形按钮来表示,主要包括表1-6列出的20个标准控件。
表1-6 VB的标准控件

(2)控件值
为了方便编程,VB为每个控件规定了一个默认属性,在代码中使用这样的属性时,不必给出属性名,而直接给出控件名即可,通常把该属性称为控件值。例如,文本框Text1的控件值为Text,下面的两个语句是等效的:
Text1.Text="计算机等级考试"
Text1="计算机等级考试"
表1-7列出了部分控件的控件值。
表1-7 部分控件的控件值

使用控件值可以节省代码,但会影响程序的可读性,因此,本书的示例中没有使用控件值。建议在不引起阅读困难时才考虑使用控件值。
3.窗体与控件的命名
名称是窗体和控件最重要的属性之一,用于在程序中标识窗体和控件。窗体或控件的名称就是其Name属性值,程序运行时不能修改。在默认的情况下,系统会自动为窗体或控件命名,如Form1、Command1等。当窗体中添置多个同类控件时,系统还会自动为之编号:Command1、Command2、Command3等。
为了能见名知义、提高程序的可读性,给对象起一个容易记忆而又具代表性的名称是十分必要的。为此,Microsoft建议对象的命名规则为:前缀+标识。其中“前缀”由对象类型简称的三个小写字母组成,“标识”是该对象的描述性名称。如关闭程序的命令按钮可以命名为:cmdClose。常用对象命名时所推荐使用的前缀见表1-8。
表1-8 对象的命名约定

其中n=1,2,3…
说明:必须在设计时通过属性窗口为对象设置新的Name(名称)属性值。