第二章 VB的界面设计
2.1 VB用户界面设计基础
1. 概述
界面的设计有两步:先绘制控件,然后确定控件属性。
绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后松开鼠标即可。确定属性:先选中控件,然后按F4键或单击工具栏上的属性窗口进入属性(Properties)窗口,再在属性窗口中找到要设置的属性并进行设置。
2. 常用属性的设置
(1)Name属性
对象都有名字,计算机把名字看成对象于对象之间的根本差异,因此在同一窗体里不许出现重名的情况(除非这是一个控件数组),且名字不得超过40个字。
在简单的程序里,给控件命名不是很必要,完全可以使用控件Name属性的缺省值。例如Text1。但在有几十个控件的复杂窗体里,就很难区分它们。所以,VB推荐由三个小写字母的前缀和一个第一个字母为大写的描述性单词组成的名字。例如cmdMyButton是一个命令按钮(前缀是cmd)
推荐的前缀
对象 |
前缀 |
例子 |
确认框(Check Box) |
chk |
chkCareerChioce |
组合框(Combo Box) |
cbo |
cboCrimesCommitted |
命令钮(Command Button) |
cmd |
cmdExit |
数据库控件(Data Control) |
dat |
datTopSecretInfo |
目录列表框(Directory List Box) |
dir |
dirTree |
驱动器列表框(Drive List Box) |
drv |
drvHardDisk |
文件列表框(File List Box) |
fil |
filDocuments |
窗体(Form) |
frm |
frm1040Tax |
框架(Frame) |
fra |
fraGroupButtons |
水平滚动条(Horizontal Scroll Bar) |
hsb |
hsbTemperature |
图形(Image) |
img |
imgPrettyDrawing |
标签(Label) |
lbl |
lblFakeName |
线(Line) |
lin |
linBorder |
列表框(List Box) |
lst |
lstCandidates |
菜单(Menu) |
mnu |
mnuHamAndEggs |
选项钮(Option Button) |
opt |
optStation101 |
图形框(Picture Box) |
pic |
picPrettyPicture |
几何图形(Shape) |
shp |
shpUpOrShipOut |
文本框(Text Box) |
txt |
txtWarning |
垂直滚动条(Vertical Scroll Bar) |
vsb |
vsbMoneyRaised |
(2)Caption属性
Caption即标题,是可以在对象外观上直接看见的文本,可以长达255字符,包括空格和标点符号,比如一个叫cmdOk的命令钮,它的Caption属性就可以是“Ok”。 注意:并不是所有的对象都有此属性,比如文本框、图片框、线条等就没有。
为按钮设置热键:在设置Caption属性时,在需要加下划线的字母前加上 “&” 符号,例如 “&File”,输出的就是“File”,这样就可以通过按ALT键和标题上那个带下划线的字母来选取它了, 不必为此编任何代码。
Name和 caption的比较:
1) Name是系统用来识别对象的,编程时需要用它来指代各对象;Caption是给用户看的,提示用户该对象的作用;
2) Name可以采用系统默认的名称,但Caption应该根据实际情况改成意义明了的名词;
3)所有对象都有Name,但不一定都有Caption;
(3)Top,Left属性
这两个属性决定对象的位置。只有两种情况需要在属性窗口里设置这两个属性:第一种是用户没有鼠标,第二种是程序员需要十分精确地设定这两个值。当选中对象,单击并拖曳它的时候,便在修改这两个值了。
(4)Height,Width属性
这两个属性决定了对象的大小,当选中控件时,它周围出现八个小黑方块,把鼠标指向这些方块,鼠标指针将变成一个双向的箭头,这时按下鼠标并拖曳它,即可改变控件的大小,也就改变了Height,Width属性。
2.2 创建窗体
1. 窗体的属性
(1) 常用属性简介
属性 |
名称 |
说明 |
Name |
窗体名称 |
系统识别窗体的标识名,一个窗体名必须以一个字母开头,可包含数字和下划线,但不能包含空格和标点符号。 |
Caption |
窗体标题 |
出现在窗体标题栏中的文本内容 |
Icon |
窗体图标 |
这个属性是用户经常要使用的一种属性。当用户的应用程序在工具条上最小化或在Windows桌面上变为一个独立应用程序时,该属性决定将采用何种图标,窗体控制框里的图标也由它决定。 |
BackColor |
窗体背景色 |
可以从属性框里弹出调色板,选择所需要的颜色 |
ForeColor |
窗体前景色 |
窗体上打印文字的颜色 |
BorderStyle |
边框风格 |
这个属性决定了窗体边框的样式,共有6种属性值。改变窗体的BordrStyle属性后,窗体在屏幕上没有变化,它只在运行时才变为所要求的样子。 |
Apearance |
外形 |
这个属性用来决定控件是否采用三维效果 |
ControlBox |
控件按钮控件按钮 |
用来决定是否采用 控件框的属性,仅在程序运行时才有效。 |
Font |
字体 |
用来改变该窗体上显示信息的字体、字型和字号,它控制着直接在窗体上打印的文本显示。 |
Visible |
可见性 |
该属性决定窗体是否可见, 默认情况下是可见的。错误地改变其值是很危险的,窗体会从眼前消失, |
WindowState |
窗体状态 |
指定窗体在运行时的三种状态:正常、最小化、最大化。 |
Enabled |
活动性 |
默认值为True,决定窗体能否被访问。 |
Left、Top、Height、Width |
左边距、顶边距、高度、宽度 |
决定窗体在屏幕上的位置及窗体大小。 |
(2)设置属性的方法
1)在设计态通过属性窗口设置
直接在属性窗口中选择或输入既可。
2)在程序代码中改变属性值
代码中的格式为: 对象名 . 属性 = 属性值
例:Form1.BackColor=RGB(255,0,0)
2. 窗体的常用方法
(1)Hide方法
用以隐藏 MDIForm 或 Form 对象,但不能使其卸载。
语法:object.Hide
object 所在处代表一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的窗体就认为是该 object。
说明:
¨ 隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。
¨ 窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。
¨ 如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。
(2)Move方法
用以移动 MDIForm、Form 或控件。
语法:object . Move left, top, width, height
Move 方法的语法包含下列部分:
部分 |
描述 |
object |
可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,带有焦点的窗体缺省为 object。 |
left |
必需的。单精度值,指示 object 左边的水平坐标 (x-轴)。 |
top |
可选的。单精度值,指示 object 顶边的垂直坐标 (y-轴)。 |
Width |
可选的。单精度值,指示 object 新的宽度。 |
height |
可选的。单精度值,指示 object 新的高度。 |
说明:只有 left 参数是必须的。但是,要指定任何其它的参数,必须先指定出现在语法中该参数前面的全部参数。例如,如果不先指定 left 和 top 参数,则无法指定 width 参数。任何没有指定的尾部的参数则保持不变。
(3)Print 方法
在 Immediate 窗口中显示文本。
语法:object . Print [outputlist]
Print 方法的语法具有下列对象限定符和部分:
部分 |
描述 |
object |
必需的。对象表达式,其值为“应用于”列表中的对象。 |
outputlist |
可选的。要打印的表达式或表达式的列表。如果省略,则打印一空白行。 |
outputlist 参数具有以下语法和部分:
{Spc(n) | Tab(n)} expression charpos
部分 |
描述 |
Spc(n) |
可选的。用来在输出中插入空白字符,这里,n 为要插入的空白字符数。 |
Tab(n) |
可选的。用来将插入点定位在绝对列号上,这里,n 为列号。使用无参数的 Tab(n) 将插入点定位在下一个打印区的起始位置。 |
expression |
可选。要打印的数值表达式或字符串表达式。 |
Charpos |
可选。指定下个字符的插入点。使用分号 (;) 直接将插入点定位在上一个被显示的字符之后。使用 Tab(n) 将插入点定位在绝对列号上。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。如果省略 charpos,则在下一行打印下一字符。 |
说明:
¨ 可以用空白或分号来分隔多个表达式。
¨ 对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。
¨对于 Boolean 数据,或者打印 True 或者打印 False。根据主机应用程序的地区设置来翻译 True 和 False 关键字。
¨使用系统能识别的标准短日期格式书写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。
¨ 如果 outputlist 数据是 Empty,则无内容可写。但是,如果 outputlist 数据是 Null,则输出 Null。在输出 Null 关键字时,要把关键字正确翻译出来。
¨ 要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。
¨如果在具有缺省显示空间的模块外使用此方法,则需要 object。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示“outputlist”。
注意: 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 “W” 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。
(4)PrintFrom方法
用以将 Form 对象的图象逐位发送给打印机。
语法:object.PrintForm
说明:PrintForm 将打印 Form 对象的全部可见对象和位图。在绘制图形时,如果 AutoRedraw 属性为 True,则在运行时PrintForm 将打印 Form 对象或 PictureBox 控件上的图形。
¨PrintForm 所使用的打印机是由操作系统的控制面板中的设置来决定。
(5) Refresh方法
强制全部重绘一个窗体或控件。
语法:object.Refresh
说明:在下列情况下使用 Refresh 方法:
¨在另一个窗体被加载时显示一个窗体的全部。
¨更新诸如 FileListBox 控件之类的文件系统列表框的内容。
¨ 更新 Data 控件的数据结构。
Refresh 方法不能用于 MDI 窗体,但能用于 MDI 子窗体。不能在 Menu 或 Timer 控件上使用 Refresh 方法。
通常,如果没有事件发生,窗体或控件的绘制是自动处理的。但是,有些情况下希望窗体或控件立即更新。例如,如果使用文件列表框、目录列表框或者驱动器列表框显示当前的目录结构状态,当目录结构发生变化时可以使用 Refresh 更新列表。
可以在 Data 控件上使用 Refresh 方法来打开或重新打开数据库(如果 DatabaseName, ReadOnly, Exclusive 或 Connect 属性的设置值发生改变),并能重建控件的 Recordset 属性内的 dynaset。
(6)Show方法
用以显示 MDIForm 或 Form 对象。
语法:object.Show style, ownerform
Show 方法的语法包含下列部分:
部分 |
描述 |
object |
可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则与活动窗体模块关联的窗体缺省为 object。 |
Style |
可选的。一个整数,它用以决定窗体是模式还是无模式 。如果 style 为 0,则窗体是无模式的;如果 style 为 1,则窗体是模式的。 |
Ownerform |
可选的。字符串表达式,指出部件所属的窗体被显示。对于标准的Visual Basic 窗体,使用关键字 Me。 |
说明:
¨如果调用 Show 方法时指定的窗体没有装载,Visual Basic 将自动装载该窗体。
¨当 Show 在显示无模式窗体时,随后遇到的代码则要执行。当 Show 在显示模式窗体 (modal form) 时,则随后的代码直到该窗体被隐藏或卸载时才能执行。
¨当 Show 在显示模式窗体时,除了模式窗体中的对象之外不能进行输入(键盘或鼠标单击)。对其它窗体进行输入前程序必须隐藏或卸载模式窗体(通常是处于响应用户某些操作状态)。MDIForm 不能是形式的。
¨在模式窗体显示时,虽然应用程序中的其它窗体失效,但其它应用程序不会失效。
¨应用程序的启动窗体在其 Load 事件调用后会自动出现。
下面的例子说明如何使用ownerform 参数:
Private Sub cmdShowResults_Click()
' 显示模式窗体 frmResults.
frmResults.Show vbModal, Me
End Sub
(7)Cls方法
清除运行时 Form 或 PictureBox 所生成的图形和文本。
语法:object.Cls
说明:
¨Cls 将清除图形和打印语句在运行时所产生的文本和图形,而设计时在 Form 中使用 Picture 属性设置的背景位图和放置的控件不受 Cls 影响。如果激活 Cls 之前 AutoRedraw 属性设置为 False, 调用时该属性设置为 True,则放置在 Form 或 PictureBox 中的图形和文本也不受影响。 这就是说,通过对正在处理的对象的 AutoRedraw 属性进行操作,可以保持 Form 或 PictureBox 中的图形和文本。
¨调用 Cls 之后,object 的 CurrentX 和 CurrentY 属性复位为 0。
3.窗体的常用事件
(1) Load事件
这个事件发生在窗体被装入内存时,且发生在窗体出现在屏幕之前。窗体出现之前,Visual Basic会看一看Load事件里有没有代码,如果有,那么它先执行这些代码,再让窗体出现在屏幕上。
(2) Click事件,Dblclick事件
这两个事件在单击或双击窗体时发生。不过单击窗体里的控件时,窗体的Click事件并不会发生,Visual Basic会去看控件的Click事件里有没有代码。
(3)Activate (活动事件)与Deactivate(非活动事件)
显示多个窗体时,可以从一个窗体切换到另一个窗体。每次激活一个窗体时,发生Activate 事件,而前一个窗体发生Deactivate事件。
(4)Resize事件
在窗体被改变大小时会触发此事件。
4.窗体的控制
(1) 装入或卸出窗体
要装入或卸出窗体,用Load 或Unload语句。
装入窗体: Load formName
卸出窗体: UnLoad formName
FormName变量是要装入或卸出的窗体名。 Load语句只是把窗体装入内存,并不显示出来,要显示窗体可以使用窗体的Show方法。
(2) 显示或隐藏窗体
要显示或隐藏窗体,用Show或Hide方法。若尚未装入内存则先装入再显示。
显示窗体: formName.show mode
隐藏窗体: formName.hide
FormName变量是窗体名,可选变元mode为0(缺省值)时窗体为非模态,为1时窗体为模态。模态窗体完全占有应用程序控制权,不允许切换到别的应用程序,除非关闭!而非模态窗体则反之。
(3)END语句
END语句的功能是终止应用程序的执行,并从内存卸在所有窗体。语法是: END
2.3 控件
1. 常用控件介绍
(1)标准控件一
TextBox 文本框 |
Timer计时器 |
HscrollBar水平滚动条 |
ListBox列表框 |
Pointer 指针 |
VScrollBar 垂直滚动条 |
CheckBox 复选框 |
Label标签 |
DirListBox 文件夹列表框 |
PictureBox图片框 |
Line 线条 |
DriveListBox 驱动器列表框 |
ComboBox 组合框 |
Shape 图形 |
FileListBox文件列表框 |
OptionButton选项按钮 |
Image图象 |
Data 数据控件 |
CommandButton 命令按钮 |
Frame 框架 |
OLE控件 | |
|
|
(2) 常用控件的属性、方法和事件
公共属性 |
Name、Caption、Enabled、Fantsize、Height、Width、Index、Left、Top、 TabStop |
公共方法 |
Move、Refresh、Setfocus(设置焦点) |
公共事件 |
Click、DblClick、LostFocus(失去焦点) |
控件名称 |
属性、方法、事件 |
说明 |
|
TextBox 文本框
(用于接受用户在框内输入的内容) |
Text属性 |
即用户从文本框输入的内容 |
|
PasswordChar属性 |
设置口令时用的掩码,如:用*代替实际输入的内容 |
|
MaxLength属性 |
最大长度,缺省值是0,即可以输入任意个字符 |
|
MultiLine属性 |
为True时可以多行文本,为False时只能输入一行文本 |
|
Alignment 属性 |
文本在框中的对齐方式:0=左对齐,1=右对齐,2=居中 |
|
Chang事件 |
当框中的文本内容发生变化时触发该事件 |
|
LostFocus事件 |
当光标离开文本框时触发该事件 |
|
Label 标签(用于在窗体上添加文字说明) |
Alignment属性 |
Caption文本的对齐方式:0=左对齐,1=右对齐,2=居中 |
|
WordWrap属性 |
为True时可根据标签大小自动换行 |
|
AutoSize属性 |
自动调节大小,为True时可根据文本大小自动调整标签大小,为False时标签大小不能改变,过长的文本被截掉 |
|
ListBox 列表框
(用于列出可供用户选择的项目列表) |
List属性 |
用于保存列表内容,访问: [对象名]. List(列表项序号)
列表项的序号由上到下依次为0、1、2、3…… |
|
ListCount属性 |
列表项数目 |
|
ListIndex属性 |
列表项索引,其值为最后选中的列表项序号,第一个为0,如果未选中任何表项,其值为-1。 |
|
Text属性 |
列表项正文,其值为最后选中的列表项的文本,它与
List(ListIndex)相同。 |
|
Columns属性 |
列表框显示形式取0时为一列显示所有行,其他值为多列。 |
|
Sort属性 |
排序属性,为True时,列表项按ASCII码排序,为False时,则不排序。 |
|
AddItem方法 |
添加列表项,使用格式:
[ 对象名.] AddItem<列表项文本>[,插入位置序号]
若不指定位置,则插入到列表末尾。 |
|
Clear方法 |
删除列表所有项目 |
|
RemoveItem方法 |
删除列表项,使用格式:
[ 对象名 .] RemoveItem 删除项序号 |
|
PictureBox 图片框
Image 图象(用来把图形放入程序里) |
AutoSize/Stretch
属性 |
调整图片框以适应图象 / 调整图象以适应外框 |
|
Picture属性 |
决定控件中显示的图象 |
|
装入图形:
imgMyHand.Picture = LoadPicture ( “c:\graphics\hand.bmp” )
删除图形: imgMyHand.Picture = LoadPicture ( “ ” ) |
|
|
|
|
ComboBox 组合框(将列表框和文本框结合在一起) |
Style属性 |
外观属性:取0时,系统创建一个带下拉式列表框的组合框;为1时,系统创建一个由文本框和列表框直接组合在一起的简单组合框,可以从列表框中选择,也可以直接在文本框中输入;为2时,系统创建一个没有文本框的下拉式列表框,单击列表框上的按钮才显示文本框,用户不能在文本框中输入,只能在列表框中选择。 |
|
Text 属性 |
其值为用户从列表框中选定的文本或直接输入的文本。 |
|
AddItem方法 |
添加列表项,使用格式:
[ 对象名.] AddItem<列表项文本>[,插入位置序号]
若不指定位置,则插入到列表末尾。 |
|
Clear方法 |
删除列表所有项目 |
|
RemoveItem 方法 |
删除列表项,使用格式:
[ 对象名 .] RemoveItem 删除项序号 |
|
CommandButton
命令按钮 |
Cancel属性 |
取消属性,它为True时, 按〖ESC〗即等于单击此按钮。 |
|
Default属性 |
缺省属性,它为True时, 按回车键即等于单击此按钮。 |
|
Timer计时器 |
Interval属性 |
两次调用Timer事件的事件间隔,用于创建动态效果。 |
|
Frame 框架
CheckBox 复选框
OptionButton选项按钮 |
Alignment属性 |
决定它们的对齐方式,0=左对齐,1=右对齐。 |
|
Value属性 |
决定它们是否被选中的属性 |
|
2. 常用控件的使用辨析
(1)文本框和标签的区别:
文本框通常用于向计算机输入信息,而标签通常用于输出信息。文本框是一个十分重要的控件,因为由复选框和选项按钮向程序输入的信息毕竟只有少数的几条信息而已。标签和文本框的区别很小,标签可以看成是一个在运行时不能修改正文的文本框,因此标签主要用于输出信息。
(2) Label的AutoSize属性和WordWrap属性
¨ 为了使标签具有垂直伸展和字换行处理,必须设置它的AutoSize属性和WordWrap属性同时为True。
¨ AutoSize属性为False,WordWrap属性为False时,若标签不够高而Caption太长时,Caption将被切割掉。
¨ AutoSize属性为False,WordWrap属性为True时,情况也如此。
¨ AutoSize属性为True,WordWrap属性为False时,表示可以水平伸展,但只显示一行信息。
(3) PictureBox和Image的Stretch属性和AutoSize属性
¨ Image只有Stretch属性,而PictureBox只有AutoSize属性。
¨ AutoSize属性设为True,则PictureBox改变自己的大小来适应其中的图形。
¨ Stretch属性设为True,则Image中的图形将改变自己的大小来适应外面的边框。
(4)Frame 框架、CheckBox 复选框、OptionButton选项按钮的区别:
¨ 复选框和选项按钮用于向程序输入信息, 框架用来对复选框和选项按钮进行分组。
¨ 复选框选中时会在小方框里打一个钩,选项按钮选中时会在小圆圈里点一个点。
3.控件使用举例
例3、4