
1.4 Visual Basic编程初步
VB可视化编程与传统的编程方法不同,不再需要编写大量的代码去描述界面元素的外观和位置,而是采用面向对象、事件驱动的方法。这种方法将代码和数据集成到一个独立的对象中去,当运用这个对象来完成某项任务时,并不需要知道这个对象是怎样工作的,只需要编写一段代码来简单地传递一些消息就可以了。
1.4.1 Visual Basic可视化编程的步骤
VB可视化编程的一般步骤如下:
1)设计界面。先建立窗体,再利用控件在窗体上创建各种对象。
2)设置属性。设置窗体或控件等对象的属性。
3)编写代码。
当然,有时也可以在创建对象的同时,一边设置对象的属性,一边编写事件过程代码。
下面通过编写如图1-20a所示的一个简单的VB应用程序来说明可视化编程的方法。
1.新建一个工程
在VB环境中开发的每个应用程序都被称为工程,新建一个工程有如下两种方法:
●启动VB后,系统显示“新建工程”对话框,在“新建工程”对话框的选项卡选择“标准EXE”命令,然后单击“打开”按钮。
●选择“文件”菜单中“新建工程”命令,然后在弹出的“新建工程”对话框中选择“标准EXE”选项,单击“打开”按钮。
上述两种方法均可以进入VB的集成开发环境(如图1-6所示),开始设计工程,即应用程序。设计工程直接面对的是窗体,因此主要工作就是在“窗体设计器”中完成窗体的设计。系统默认的窗体只有一个Form1,其窗体名称和标题属性均默认为Form1。根据工程设计需要,还可以添加多个窗体,添加的窗体依次为Form2、Form3…。
2.界面设计
VB应用程序设计的第一步是进行窗体的界面设计,通常是在窗体中添加各种控件。
如图1-20b所示,在窗体Form1上添加程序所需的控件,依次分别为标签控件Label1和命令按钮控件Command1、Command2,同类型的控件序号依次自动增加。这时基本完成程序的界面设计,下面开始设计各对象的属性。

图1-20 一个简单的例子
3.设置属性
对象属性的设置是在属性窗口中进行的,其操作方法如下。
1)首先设置窗体Form1的属性。单击窗体的空白区域(不要单击任何控件),确认选中的是窗体,可从“对象”下拉列表框中查看。
在属性窗口中找到标题属性Caption,将其值改为“第一个例子”,如图1-21a所示;设置窗体Form1的名称属性Name为frmFirst,如图1-21b所示,此时工程窗口中的窗体名称也随之改变,如图1-21c所示。

图1-21 设置窗体属性
窗体的其他属性也可根据程序的需要进行设置。如运行时窗体的背景颜色、边框风格、窗体的大小以及最大、最小化的状态等。
2)设置控件的属性。单击窗体上的控件,确认选中该控件,然后根据需要逐一设置控件的各属性。选中标签控件“Label1”,将其边框风格属性(BorderStyle)改为:1-Fixed。然后单击背景颜色属性(BackColor)右边的箭头按钮,从弹出的调色板窗口中选择白色(如图1-22a所示),单击字体属性(Font)右边的“…”按钮,从弹出“字体”对话框中设置相应的字体类型、字体样式和字体大小(如图1-22b所示)。

图1-22 调色板与字体对话框
另外将两个命令按钮的标题分别设置为“欢迎(&H)”和“时间(&T)”,其中“&H”使得字母H下方显示下画线,并且成为一个热键:当从键盘按下<Alt+H>时,相当于单击该命令按钮。
所有对象的属性设置参见表1-9。属性设置后的窗体如图1-23所示。

图1-23 属性设置后的窗体
表1-9 属性设置

4.编写代码
打开“代码编辑器”,单击“对象”下拉列表框右边的箭头按钮,从中选择Form对象,如图1-24所示。

图1-24 在“对象”下拉列表框中选择Form窗体
在“过程”事件下拉列表框中选择Load事件,在代码窗口中输入下列代码:

用同样的方法,输入命令按钮Command1和Command2的单击(Click)事件过程代码:

说明:事件过程的首尾两行(粗体):

是系统自动给出的代码,程序员不必重复输入。
5.运行工程
单击工具栏上的“启动”按钮或按<F5>键,即可运行工程,显示如图1-25a所示。单击“欢迎”按钮,显示如图1-25b所示,单击“时间”按钮,窗体显示如图1-25c所示。

图1-25 运行工程
单击标题栏上的“关闭”按钮可关闭该窗口结束运行,单击工具栏上的“结束”按钮也可结束程序运行,返回“窗体设计器”窗口。
6.修改工程
修改工程包括修改对象的属性和代码,也可以添加新的对象和代码,直到满足工程设计的需要为止。在本例的窗体中,给命令按钮增加图片,使之图文并茂,如图1-26所示。

图1-26 图文并茂的按钮
修改方法为:选中“欢迎”按钮Command1,修改其风格属性(Style)为1-Graphical。单击图片属性(Picture)右边的三点按钮,打开“加载图片”对话框。在VB的系统目录中找到图标文件Handshak.ico,如图1-27所示。

图1-27 “加载图片”对话框
同样方法修改“时间”按钮Command2,其中图标文件为
…\Microsoft Visual Studio\Common\Graphics\Icons\Misc\Clock06.ico
7.保存工程
设计好的应用程序在调试正确以后需要保存工程,即以文件的方式保存到磁盘上。一般是先将程序写入磁盘,然后再调试程序;当然,也可先对程序进行调试和运行,再写入磁盘。保存工程可采用下列方法:
●选择“文件”菜单中的“保存工程”或“工程另存为”命令,如图1-28a所示。
●单击工具栏上的“保存工程”按钮。
如果是从未保存过的新建工程,系统则打开“文件另存为”对话框,如图1-28b所示。

图1-28 “保存工程”菜单与“文件另存为”对话框
一个工程可能含有多种文件,如工程文件和窗体文件,这些文件集合在一起才能构成应用程序。保存工程时,系统会提示保存不同类型文件的对话框,这样就有选择存放位置的问题。因此,建议程序员在保存工程时将同一工程所有类型的文件存放在同一文件夹中,以便修改和管理程序文件。
在“文件另存为”对话框中,注意保存类型,保存窗体文件(*.frm)到指定文件夹中。窗体文件存盘后系统会弹出“工程另存为”对话框,保存类型为“工程文件(*.vbp)”,默认工程文件名为“工程1.vbp”,保存工程文件到指定文件夹中。
如果想保存修改以后磁盘上已有的工程文件,直接单击工具栏上的“保存”按钮,系统不会弹出“文件另存为”对话框。
8.工程的编译
当完成工程的全部文件之后,即可将此工程转换成可执行文件(*.exe)——编译工程。在VB中对程序(工程)的编译非常简单,在“文件”菜单中选择“生成工程1.exe”(如图1-29a所示)。在打开的“生成工程”对话框选择程序所保存的文件夹和文件名(如图1-29b所示),然后单击“确定”按钮即可生成Windows中的应用程序。

图1-29 编译工程
1.4.2 控件的画法
在窗体上添加程序设计所需要的各种控件,是VB可视化程序设计中界面设计的重要内容。将工具箱中的控件添加到窗体中的过程称为“画控件”,下面介绍控件的画法。
1.在窗体上画一个控件
在窗体上画一个控件有两种方法:
●单击工具箱中的控件按钮,当鼠标指针变成一个十字指针时,再在窗体的工作区按住鼠标左键拖动鼠标,即可在窗体上画出对应控件。
●双击工具箱中的控件按钮,即可在窗体的中央画出控件。
两种方法的区别是,第一种方法画出的控件大小和位置可随意确定,而第二种方法画出的控件的大小和位置是暂时固定的。当然,任何控件的大小和位置都可以根据需要修改。
2.控件的缩放和移动
在设计时,当在窗体上画出控件以后,控件的边框上有八个蓝色小方块,这表明该控件是“活动”的,通常称为“当前控件”,如图1-30所示。单击控件,可以使之成为当前控件。

图1-30 当前控件
对于选中的控件(即当前控件),可直接使用鼠标拖动控件到需要的地方来调整控件的位置,利用鼠标指针对准控件的选中标志(8个小方块)出现双向箭头时,可以改变控件的大小(即高度和宽度)。当然,也可用<Shift>+“方向箭头”来改变控件的大小,用<Ctrl>+“方向箭头”来移动控件的位置。
除了上述方法外,还可以在属性窗口修改某些属性来改变控件的大小和位置。与窗体和控件大小及位置有关的控件属性有:Left、Top、Width及Height。其中(Left,Top)是窗体或控件左上角的坐标,Width是其宽度,Height是其高度。在属性窗口的“按分类序”中的“位置”栏上可以找到这些属性,然后修改其值。
3.控件的复制与删除
在窗体上,控件的复制和删除操作同Windows环境下文件的操作相同。首先选中控件,单击工具栏上的“复制”按钮或按<Ctrl+C>键可将控件复制到剪贴板中,然后单击“粘贴”按钮或按<Ctrl+V>键将控件粘贴到窗体的左上角。由于复制控件名称相同,系统会弹出“是否创建控件数组”对话框,如图1-31所示。

图1-31 是否创建控件数组
单击“是(Y)”按钮,将在窗体上创建一个控件数组,单击“否(N)”按钮即可在窗体上得到该控件的复制品。复制品的所有属性与原控件相同,只是名称属性(Name)的序号比原控件大。
要删除活动控件,只需选中控件后按<Delete>键或单击工具栏上的“删除”按钮。
另外,还可以利用右键快捷菜单上的命令对控件进行复制、删除等操作,如图1-32所示。

图1-32 使用快捷菜单复制控件
4.控件的布局
当窗体上存在多个控件时,需要对窗体上的控件排列、对齐等格式进行操作。这些操作一般可以通过“格式”菜单完成,如图1-33所示。在“对齐”子菜单中,由于没有选定多个控件,所以很多功能处于无效状态。

图1-33 打开“格式”菜单
要调整多个控件的位置,需要同时选定多个控件。其选定方法为:在窗体的空白区域利用鼠标左键拉出一个矩形框,将需要选中的控件圈上即可选定多个控件。或者先按下<Shift>键不放,再单击要选中的控件,如图1-34所示。

图1-34 选定多个控件
在选定多个控件之后,就可以利用“格式”菜单对窗体上多个控件的格式进行调整。
1.4.3 公共的属性与事件过程
在Visual Basic所使用的对象(窗体及控件)中,很多属性和事件是共有的,这些共有的属性和事件在不同对象中的功能和用法基本相同。
1.公共的属性
属于各对象共有的属性有很多,常用的有Name、Caption、Left、Top、Width、Height、Font、ForeColor、BackColor、Enabled、Visible等。
(1)名称属性(Name)
名称属性为字符型数据,用于确定对象的名字,即程序代码中使用的对象标识符。新建一个对象后,系统会为其规定一个默认的名字。用户可以更改也可保持默认名字不变。该属性只能在设计时更改,运行时只读。所有对象(窗体及控件)都有名称属性。
(2)标题属性(Caption)
标题属性为字符型数据,用于返回或设置对象(如窗体的标题栏、标签、命令按钮)所显示的文本信息。例如,下述语句将窗体的标题栏内容设置为“这是第一个应用程序”:
Forml.Caption="这是第一个应用程序"
此属性在设计阶段通过属性窗口或在运行阶段用程序代码均可设置。
在为命令按钮、标签、单选按钮、复选框定义标题时,可为其定义一个键盘操作的热键,其定义方法是:在输入标题内容时,将需要定义成热键的字母前加入一个“&”符号。运行时该字母下面显示的下画线表明该字母为“热键”,用户只需按下<Alt>+“该字母键”,便可激活并执行该命令按钮。例如,将命令按钮的Caption属性设置为:“取消(&C)”,即为该按钮定义了一个热键“C”。
(3)位置与大小属性(Left、Top、Width、Height)
位置与大小属性为数值型数据,用于设置或返回对象在其容器中的显示位置和对象的大小。对于窗体来说,Left和Top属性用于设置窗体左上角在屏幕中的坐标位置;Width和Height属性用于设置窗体的宽度和高度。对于控件来说,其容器可以是窗体或图片框。
此属性在设计阶段通过属性窗口或在运行阶段用程序代码均可设置。
(4)与字体有关的属性
在属性窗口中选择字体属性(Font),此时在右边的设置框中将显示一个“…”的按钮,单击该按钮,将弹出“字体”对话框(如图1-22b所示),可以设置与字体相关的所有信息:字体类型、字体样式以及字体大小等。
若要在运行阶段利用代码设置字体,则必须借助与字体相关的几个属性来实现,这些属性分别是:FontName、FontSize、FontBold、FontItalic、FontStrikethru和FontUnderline,它们分别用于设置字体名、字体大小、粗体、斜体、删除线和下画线。其中,后四项属性为逻辑型数据:True,表示该项生效;False,表示该项不生效。例如:

(5)前景色属性(ForeColor)
前景色属性用于设置对象的前景色。对于文本框、标签、单选按钮、复选框,前景色即为显示文本的颜色。对于窗体,前景色则是由Print方法输出文本的颜色。例如,若要在窗体中输出红色的“Visual Basic”字符串,代码为:

其中RGB函数用来指定颜色。
此属性在设计阶段通过属性窗口或在运行阶段用程序代码均可设置。
(6)背景色属性(BackColor)
背景色属性用于设置对象的背景颜色。在属性窗口中选中该项属性,右边的设置框将显示一个下拉式按钮,单击该按钮,系统将弹出一个下拉式组合框,在组合框中,以调色板和系统两种方式显示了可选的颜色,从中选择所需的颜色即可。
此属性在设计阶段通过属性窗口或在运行阶段用程序代码均可设置。
(7)可用性属性(Enabled)
可用性属性返回或设置一个逻辑型的值,用于决定窗体或控件是否响应用户所产生的事件。该属性默认值为True,若将该属性设置为False,则窗体或控件将失效,即不能响应用户的任何事件或操作。Visual Basic的绝大多数控件均有该属性。
可用性属性可通过属性窗口设置或用代码进行修改。在程序设计中,常利用该属性使某个控件暂时失效。
(8)可视性属性(Visible)
可视性属性为逻辑型数据,决定对象是否可见,默认值为True。若将其设置为False,则对象运行时不可见。
(9)提示文本属性(ToolTipText)
提示文本属性为字符型,用于设置当鼠标在控件上暂停时显示的提示性文本。在许多Windows应用程序中,当鼠标暂停于工具栏的某个按钮上时,系统会自动显示该按钮的功能说明,就是通过该属性来实现的。
2.公共的事件过程
Visual Basic采用了事件驱动的编程机制,一个程序员,要能灵活自如地编写Visual Basic程序,充分利用好各控件的功能,就必须熟悉和掌握各控件所能响应的事件,以及各种事件所产生的背景和触发条件。
根据事件产生的来源,可分为鼠标事件、键盘事件和系统事件三类。鼠标事件是Windows应用程序中触发频率最高的事件,用户一般都习惯用鼠标来实现对应用程序的操作。有时也需要用键盘来进行一些辅助性的操作,所以除鼠标事件外,还有键盘事件。在Visual Basic中还有一类特殊的事件,该事件是由系统自动触发的,这类事件称为系统事件。比如,定时器控件,该控件可在一定的时间间隔内自动产生Timer事件,以实现一些周期性的操作。
键盘事件(KeyDown、KeyUp、KeyPress)与高级鼠标事件(MouseDown、MouseUp、MouseMove)将在第11章中介绍,下面对常用的公共事件作一简单介绍。
(1)单击事件(Click)
当用户将鼠标指针置于对象上,按下鼠标左按钮并立即释放(即单击操作)时,便会在该对象上触发Click事件。还可以在程序代码中触发Click事件:
1)将一个CommandButton控件的Value属性设置为True。
2)将一个OptionButton控件的Value属性设置为True。
3)改变一个CheckBox控件的Value属性的设置。
事件过程格式:

说明:只有当对象为控件数组时,参数Index才会出现。Index参数值由Visual Basic自动传入,在事件过程中可以引用,其值代表用户单击了控件数组中的哪一个成员。Index参数也常出现在其他事件过程中,其含义相同,以后就不再赘述。
事件过程中的第一行和最后一行被称为过程头和过程尾,当选定了一个对象和对应的事件后,Visual Basic会自动把过程头及过程尾列在窗口内,用户只要在两者之间输入程序代码即可。在下面的叙述中,仅列出过程头。
(2)双击事件(DblClick)
当用户在对象上双击时产生DblClick(双击)事件。
Private Sub<对象名>_DblClick([Index As Integer])
(3)改变事件(Change)
当用户改变控件的内容时,产生Change(改变)事件,事件过程格式为
Private Sub<对象名>_Change([index As Integer])
此事件如何和何时发生随对象(控件)的不同而不同。
●文本框:改变文本框的内容。该事件当用户改变正文或通过代码改变Text属性的设置时发生。
●组合框:改变组合框控件的文本框部分的正文。该事件仅在Style属性设置为0(下拉组合框)或1(简单组合框)和正文被改变或者通过代码改变了Text属性的设置时才会发生。
●目录列表框:改变所选择的目录。该事件在双击一个新的目录或通过代码改变Path属性的设置时发生。
●驱动器列表框:改变所选择的驱动器。该事件当选择一个新的驱动器或通过代码改变Drive属性的设置时发生。
●水平和垂直滚动条:移动滚动条的滚动框部分。该事件在进行滚动或通过代码改变Value属性的设置时发生。
●标签:该事件当通过代码改变Caption属性的设置时发生。
●图片框:改变图片框的内容。该事件当通过代码改变Picture属性的设置时发生。
说明:Change事件过程可协调在各控件间显示的数据或使它们同步。例如,可用一个滚动条的Change事件过程更新一个文本框控件中滚动条的Value属性的设置,或者可以利用Change事件过程在一个工作区里显示数据和公式,在另一个区域里显示结果。