第3章 窗体与常用控件
双语教学词汇:
控件的分类 Control Categories 固有控件 Intrinsic Controls 标准控件 Standard Controls 扩展控件 ActiveX Controls 可插入控件 Insertable Objects 鼠标控件 Mouse Event 键盘控件 Keyboard Event 控件的值 Value of the Control 焦点 Focus
图形用户界面GUI: Graphical User Interface
掌握VB标准控件的构成原理、性质、主要属性和主要方法,是掌握VB程序设计的关键。 本章将对在创建应用程序的用户界面时所使用的窗体对象和常用控件对象作详细介绍,使读者对图形用户界面的可视化及事件驱动过程有进一步的认识。 图形用户界面通过向程序提供一致的、直观的图形用户接口部件,使用户能轻松地为程序设计出一致的、清晰的“外观”,用户与程序通过它才能交互操作。Visual Basic的图形用户接口由窗体和控件来实现。 3.1 通用属性 在Visual Basic中,每一个窗体或控件都有描述其各自特征的属性,不同的控件属性不完全相同。而许多控件都有很多相同的属性,我们将这部分属性称为通用属性。 窗体或其它控件对象设置属性有两种方法: ①在设计状态通过属性窗口进行属性的设置(见第二章)。应注意的是,必须先选中要操作对象,然后设置属性;在大多数情况下采用系统默认的属性值,只改变需要改变的属性值。 ②在程序代码中使用如下赋值语句来改变属性值: [ 对象名.] 属性名 = 属性值 该语句功能为将“=”左边对象的相应属性值改变为“=”右边的属性值,使用户能看到属性值的变化效果。 下面介绍窗体或其它控件对象的一些常用的通用属性。 1. Name 名称属性 功能:在程序代码中用于标识对象的名称。所有对象都有该属性,在运行状态不能改变,是只读的。 每个对象创建时,VB会自动产生一个默认的文件名,由对象类名后跟序号组成,如Form1、Label1、Label2等。用户可以在设计状态时修改Name属性,其命名规则见第二章。
注意:Name属性在外观上显示不出来,起标识和引用的作用,所以在同一窗体中,控件的Name属性是唯一的,不能同名;在同一工程中,窗体对象也不能同名。 2. Caption标题属性 功能:在对象的表面或标题栏上显示的文本,在外观上往往起提示和标志的作用。在设计和运行状态下均可改变。 在Command Button、Label、Frame、Option Button和CheckBox控件的Caption属性中,输入“&一个字母”表示设置为快捷方式,该字母加下划线显示,例如Command Button(Name属性为Command1)的Caption属性设置为“帮助&Help”,则其显示结果如图3.1.1所示。如果用代码实现,则用以下语句: Command1. Caption =\帮助&Help\ 以上语句将控件的名为Command1的Caption属性设置为“帮助Help”。 图3.1.1 设置对象的 Caption属性
注意:Caption属性和Name属性的区别。Caption属性的值显示在对象的表面或标题栏中;而Name属性是用于区别其他对象的标识,在代码中标识对象。
2
3. Enabled有效性属性
功能:决定对象是否响应用户或系统生成的事件,决定对象的有效性,在运行期间才起作用。当属性值被设置为True (默认值)时,表示可以响应用户或系统生成的事件;当被设置为False时,表示禁止该对象响应事件,运行时控件对象呈暗淡色,如图3.1.2所示。如果用代码实现,则用以下语句:
Enabled属性 设置为True
Enabled属性 设置为False
图3.1.2 对象Enabled属性的示意图
Command1. Enabled= True '将名为 Command1的控件设置为有效 Command2. Enabled = False '将名为 Command2的控件设置为无效 4. Visible可见性属性
功能:设置窗体或控件对象运行时是否可见。如果属性值设置为True(默认值),窗体或控件对象可见;如果属性值设置为False,窗体或控件对象不显示,此时不能被用户操作。在运行时才能看到效果。如果用代码实现,则用以下语句:
Command1. Visible = True '将名为 Command1的控件设置为可见 Command2. Visible = False '将名为 Command2的控件设置为不可见 5. Height、Width、Top和Left的大小和位置属性
功能:Top属性决定对象的顶部距其直接容器顶部的距离;Left属性决定对象的左边框距其直接容器的距离;Height、Width属性分别决定对象的高度和宽度,如图3.1.3所示。单位为twip,1twip = 1/20点 = 1/1440英寸 = 1/567厘米。
在设计界面时,VB自动提供了默认坐标系统(其它坐标系统见第九章),容器的左上角为坐标原点(0,0)向右为相对于坐标原点的X坐标,向下相对于坐标原点的Y坐标,如图3.1.3所示。 6. Font字体属性
功能:设置窗体或控件上显示文本的字体、字形和大小等。
设置Font属性有两种方法:
①在设计状态的属性窗口中,点击Font,出现字体对话框,如图3.1.4所示,然后进行设置。
②在代码窗口中,通过以下方式进行: [对象.]FontName =\字体名\ '设置字体名称 [对象.]FontSize = 整数值 '设置字体的大小 [对象.]FontBold = True / False '设置为粗体或常规 [对象.]FontItalic = True / False '设置为斜体或常规
[对象.]FontUnderLine = True / False '设置为下划线或取消下划线 [对象.]FontStrikethru = True / False '设置为加删除线或取消删除线 例3.1.1 Font属性的设置举例。在窗体上建立一个Label控件(名称为Label1),单击窗体,得到如图3.1.5的运行结果。
图3.1.4 Font属性对话框
图3.1.3 对象的大小和位置属性、默认坐标示意图
图3.1.5 Font属性的设置举例
3
分析
单击窗体出现运行结果,那么操作的对象是窗体,操作的方式是单击,因此事件驱动过程应选择Form_Click()。
在窗体上添加一个Label控件,此例没有改变任何属性,所以默认名称为Label1。 程序代码
Private Sub Form_Click()
' 使Label1显示为“Visual Basic 6.0 程序设计”
Label1.Caption = \程序设计\
Label1.FontName = \隶书\ ' 设置Label1的字体为“隶书” Label1.FontSize = 20 ' 设置Label1的字体大小为20 Label1.FontBold = True ' 设置Label1的字体为粗体 Label1.FontItalic = True ' 设置Label1的字体为斜体 Label1.FontUnderline = True ' 设置Label1的字体为下划线 End Sub 扩展性说明:
①对于不同的对象可以分别设置不同的Font属性。
②如果窗体中的所有控件设置相同的Font属性,可以在设计状态下,先将窗体的Font属性设置为所要求的,然后再以这种方式添加的控件,其Font属性与窗体所设置的Font属性相同。
7. ForeColor、BackColor前景色和背景色属性
功能:ForeColor 和BackColor属性设置文本和图形的前景色和背景色。 设置前景色和背景色有两种方法: ①在设计状态下通过属性窗口进行设置。 ②在代码窗口中通过以下方式进行设置: [对象.]ForeColor = 颜色值 [对象.]BackColor = 颜色值
颜色值的设置方法有四种(详见第九章)。此处只以最常用的RGB()函数来进行设置。例如:
Form1.BackColor = RGB(200,0,0) ' 将Form1的背景色设置为红色 说明:在RGB(r, g, b)函数中,参数r、g、b分别代表红、绿、蓝三种颜色分量,取值范围为0到255。
3.2 窗体 窗体是VB中最基本的对象,是应用程序的基本组成部分,是包容用户界面或对话框所需的各种控件对象的容器。在新建工程后,VB会产生一个空白窗体(默认的窗体名称为Form1),并以此作为创建应用程序的起点。
3.2.1窗体的属性
窗体除了具有通用属性Name、Caption、Enabled、Visible、Height、Width、Top、Left、
4
Font、ForeColor和BackColor外,还有自己独特的属性。 1. MinButton、MaxButton属性
功能:MinButton属性和MaxButton属性分别决定窗体是否有最小化按钮或最大化按钮。当取值为True时,窗体显示最小化按钮或最大化按钮;当取值为False时,最小化按钮或最大化按钮显示为灰色,表示不可选。默认值均为True,表示显示最小化按钮或最大化按钮。
如果想让最大化按钮显示为灰色,可用以下代码实现: Form1.MaxButton = False 扩展性说明:
①如果将MinButton属性和MaxButton属性均设置为False,则最小化按钮和最大化按钮均不会显示,只显示关闭按钮。
②如果Form1为当前窗体,则Form1可以省略,以上语句变为: MaxButton = False 或者
Me. MaxButton = False 2. ControlBox属性
功能:确定窗体上是否显示三个控制按钮(最大化、最小化、关闭按钮)和控制菜单,当取值为True时,显示三个控制按钮和控制菜单;当取值为False时,不显示三个控制按钮和控制菜单。默认值均为True,表示显示三个控制按钮和控制菜单。 3. BorderStyle属性
功能:确定窗体或控件的边框类型,取值范围为0到5。 4. Picture属性
功能:设置控件对象中显示的图形。默认值为空,表示控件对象中无图形。 将窗体的背景设置为图像的方法有两种:
①直接在属性窗口中,选择Picture属性,通过选择文件或“粘贴”剪贴板中的图形,进行设置。
②在程序中用函数LoadPicture将图像调入窗体作为背景,其格式为: [对象名.]Picture = LoadPicture(\图像文件的完整路径名和文件名\如果对象为当前窗体,则可省略为:
Picture = LoadPicture(\图像文件的完整路径名和文件名\5. WindowState属性
功能:窗体开始运行时的初始显示状态。当属性值0时,表示窗体为正常状态(默认值);当属性值为1时,表示窗体以最小化方式显示;当属性值为2时,表示以最大化方式显示。
3.2.2 窗体事件
窗体事件是指窗体能够响应的动作。最常用的有如下事件。 1. Click事件
单击窗体,触发Click事件。 2. DbClick事件
双击窗体,触发DbClick事件。
5
注意:
“双击”实际上触发两个事件:第一次点击产生时产生Click事件,第二次点击时产 生DblClick事件。 3. Load事件
运行VB程序将窗体读入内存(加载窗体),VB系统自动触发Load事件,此时窗体 为不活动窗体。Load事件一般用于在运行程序时对属性和变量进行初始化。
例3.2.1 改变窗体属性举例。程序运行开始时,窗体中有一背景图,每单击窗体一次,窗 体便缩小为当前窗体的1/3。初始界面及单击窗体一次后的结果如图3.2.1所示。
设置窗体背景图像
设置窗体的背景图可选择前面介绍的两种方法中的任意一种,而本例选用的是第2种 方法,所以具体代码为:
Private Sub Form_Load()
Form1.Picture = LoadPicture(\图3-2-1.bmp\ '调图入Form1中 End Sub
图3.2.1 注意:因为本例中的当前窗体为Form1,所以: 改变窗体属性示例 Form1.Picture = LoadPicture(\图3-2-1.bmp\也可省略为:
Picture = LoadPicture(\图3-2-1.bmp\缩小窗体
①单击窗体,故选择Form_Click()事件。
②窗体缩小1/3,本质上就是每次使窗体的Width和Height属性的值减少1/3,即为当前窗体的Width和Height属性值的2/3,具体代码如下:
Private Sub Form_Click()
Form1.Width = Form1.Width * 2 / 3 Form1.Height = Form1.Height * 2 / 3
End Sub
4. Unload事件
关闭窗口时才发生。把窗体从内存中删除(即卸载窗体)。 5. Activate事件
发生在Load之后,窗体变为活动窗体,VB系统自动触发Activate事件,此后才能响应用户在界面上的交互操作。 6. Resize事件
如果进行了改变窗体大小的操作,会触发Resize事件。
例3.2.2 窗体事件
运行程序后,VB系统自动触的触发举例。程序代码发Load事件,之后又自动触事件,之后又自动触如下,当运行程序,单发Activate事件 双击窗体后,双击窗体后,先触先触发Click发Click事件,再触发事件,再击窗体,双击窗体后的单击窗体后,触发Click事件 DblClick触发DblClick事件 事件 结果如图3.2.2所示。
图3.2.2 窗体事件的触发举例
6
程序代码:
Private Sub Form_Activate()
Print \触发 Form_Activate 事件\ '显示提示信息“触发 Form_Activate 事件” End Sub Private Sub Form_Click()
Print \触发 Form_Click 事件\ '显示提示信息“触发 Form_DblClick 事件” End Sub
Private Sub Form_DblClick()
Print \触发 Form_DblClick 事件\ '显示提示信息“触发 Form_Click 事件” End Sub
Private Sub Form_Load() Form1.Show
Print \触发 Form_Load 事件\ '显示提示信息“触发 Form_Load 事件” End Sub 扩展性说明:
当运行程序时,VB系统首先自动触发Load事件,然后自动触发Activate事件;当用户单击窗体时,才触发Click事件;当用户双击窗体时,先触发Click事件,然后再触发DblClick事件。
注意:Load事件和Activate事件由VB系统自动触发;而Click事件和DblClick事件由用户触发。
7. MouseDown、MouseUp和MouseMove事件
窗体及大多数控件都能够识别鼠标的MouseMove、MouseDown和MouseUp事件,通过响应这些鼠标事件,能对鼠标位置及状态的变化作出响应。
在窗体或控件上,当按下任意鼠标键 (左键或右键)时,会触发MouseDown事件;松开任意鼠标键(左键或右键)时,会触发MouseUp事件;移动鼠标指针到屏幕新位置时,会触发MouseMove事件。
(1)格式
Private Sub 对象名_MouseDown ( Button As Integer, Shift As Integer, X As Single,Y As Single)
: End Sub
Private Sub 对象名_MouseUp ( Button As Integer, Shift As Integer, X As Single, Y As Single )
: End Sub
Private Sub 对象名_ MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
: End Sub
(2)参数(MouseDown,MouseUp事件和MouseMove给出相同的4个参数)
①Button 参数表示按下或松开鼠标某个按钮时,给出鼠标按键的状态。用Button的低三位bit分别表示鼠标的三个按键的状态,bit 0 对应左按键,bit 1 对应右按键,bit 2 对应中间按键,如图3.2.3所示。
当某一按键被按下,相应的位被置1,否则为0。
最高
保留
最低
左按钮 右按钮 中间按钮
图3.2.3 鼠标的Button参数的位表示图
7
表3.2.1 Button参数的取值
十进制 1 2 4 二进制 001 010 100 按键情况 按下左按钮 按下右按钮 按下中间按钮 SHIFT键 CTRL键 ALT键 具体参数如表3.2.1 所示。
注意:如果鼠标只有一个按钮,则只有左按钮;若有两按钮,则只有左、右按钮。MouseDown和MouseUp这两个鼠标事件不能检测出两个按钮同时按下的情况。
②Shift参数表示在Button参数指定的按钮被按下或者被松开的情况下,键盘的Shift、Ctrl和Alt键的状态,用Shift参数的低三位bit分别表示键盘的Shift、Ctrl和Alt这三个按键的状态,bit 0对应Shift键,bit 1对应Ctrl键,bit 2对应Alt键,如图3.2.4
最高
保留
图3.2.4 鼠标的Shift参数的位表示图
表3.2.2 Shift参数的取值
最低
所示。表3.2.2给出了在鼠标操作的同时按下功能键的状态。
③X,Y参数给出鼠标指针在窗体或控件中的当前位置。通过X和Y参数返回一个指定鼠标指针当前位置的数,以使用该对象的坐标系统的刻度为单位。 例3.2.3 鼠标事件举例。在窗体上,按下鼠标键,窗体的背景色变为绿色,并显示“按下鼠标键,触发 MouseDown 事件”;松开鼠标键,窗体的背景色变为红色,并显示“松开鼠标键,触发 MouseUp 事件”。
选择事件过程
由于是在窗体上按下鼠标键,就改变背景色显示信息,所以选择操作对象为窗体,选择的操作为MouseDown。由此,选择Form_MouseDown事件过程。
十进制 1 2 3 4 5 6 7
二进制 001 010 011 100 101 110 111 按键情况 只按下Shift钮 只按下Ctrl钮 按下Ctrl+Shift中间按钮 只按下Alt钮 按下Alt+Shift中间按钮 按下Ctrl+Ctrl中间按钮 按下Alt+Ctrl+Shift中间按钮 同理,由于是在窗体上松开鼠标键,就改变背景色显示信息,所以选择的操作对象为窗体,选择的操作为MouseUp。由此,选择Form_MouseUp事件过程。
程序代码:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
BackColor = RGB(0, 220, 0) '设置背景色为绿色
Print \按下鼠标键,触发 MouseDown 事件\ '显示提示信息 End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
BackColor = RGB(220, 0, 0) '设置背景色为红色
Print \松开鼠标键,触发 MouseUp 事件\ '显示提示信息 End Sub 扩展性说明:
①上例中,只要按下鼠标键(无论是左键还是右键),均会改变窗体的背景和显示信息。 ②如果将上例的要求变为:在窗体上,按下鼠标左键,窗体的背景色变为绿色,并显示“按下鼠标左键,触发 MouseDown 事件”;松开鼠标左键,窗体的背景色变为红色,并显示“松开鼠标左键,触发 MouseUp 事件”,则程序代码可改变为:
8
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then '用Button参数来判断是否按下鼠标的左键
BackColor = RGB(0, 220, 0) '设置背景色为绿色
Print \按下鼠标左键,触发 MouseDown 事件\ '显示提示信息
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then '用Button参数来判断是否松开鼠标的左键
BackColor = RGB(220, 0, 0) '设置背景色为红色
Print \松开鼠标左键,触发 MouseUp 事件\ '显示提示信息
End If
End Sub
注意:此时对鼠标右键进行操作不会做任何改变。 ③IF语句的详细介绍见第五章。
④利用Button参数判断对某个鼠标键进行了操作。 ⑤参数X,Y在绘图中将会广泛应用。 8. 键盘事件
有关键盘操作的事件有KeyDown、KeyUp和KeyPress事件。 注意:必须是具有焦点的控件才可能触发键盘操作的事件。 (1)KeyDown ,KeyUp事件
当窗体或控件具有焦点时,按下键盘按键时触发KeyDown事件过程;当控件具有焦点时,松开键盘按键时触发KeyUp事件过程。格式:
Private Sub 对象名_KeyDown ( KeyCode As Integer, Shift As Integer )
: End Sub
Private Sub对象名_KeyUp ( KeyCode As Integer, Shift As Integer )
: End Sub 扩展性说明:
①KeyDown和KeyUp事件返回的是在键盘上按键的键号KeyCode;如未按键,返回的键号值为0。
②键号是键盘上每个键的编号,不区分上、下档键,即“A”与“a”的键号值相同。如A键的键号值均为65,B键的键号值均为66,以此类推,Z键的键号值均为90;0键的键号值均为48,1键的键号值均为49,以此类推,9键的键号值均为57。
③键号值可用VB常数表示: vbKey + 按键上的字符
如Shift键的键号为vbKeyShift,vbKeyA,vbKeyF1等。 ④Shift参数的取值与鼠标事件中Shift参数的取值一致。
9
(2) KeyPress 事件
当窗体或控件具有焦点时,按下某ASCII 字符的键后再松开该键时,触发KeyPress事件。常用于接受用户输入的字符串。格式:
Private Sub 对象名_KeyPress ( KeyAscii As Integer ) End Sub 扩展性说明:
①参数KeyAscii返回按键的ASCII码。为0时,可用Chr()函数将KeyAscii参数转化为字符:Char$ = Chr(KeyAscii)
回车Enter键的ASC II 码为 13 ,等同于VB常数vbCrLf 。
②KeyPress事件的KeyAscii参数返回按键的ASCII 码。仅当按下的键具有ASCII 码的标准ANSI字符编码时,才触发KeyPress事件。
③ KeyPress 事件只识别ASCII 码键和Enter、Tab、Backspace键。其它功能键、编辑键,及特殊的组合键时不被触发。
例3.2.4 KeyPress事件举例。运行程序时,按下某个字符键,在窗体上显示KeyAscii值和对应的按下的键名。运行程序,当在键盘上依次按下“A”、“y”、“7”和“<”键后的运行结果如图3.2.5所示。
分析
选择Form_ Activate事件,用Print方法显示表头。 :
图3.2.5 KeyPress事件举例
KeyAscii参数返回按键的ASCII 码,所以用Chr()函数将按键的ASCII码转换成对应键的字符表式。Chr()函数详见第四章。
程序代码
Private Sub Form_Activate()
Print \值\按下的键名\ '显示表头 End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
Print KeyAscii, Chr(KeyAscii) '显示键名和 KeyAscii的值 End Sub
注意:学习对象事件过程,主要是了解和体会事件什么时候被触发,触发的次序如何。
3.2.3 窗体方法
窗体可调用的方法很多,窗体方法的调用一般是放在程序代码中。 1. Print方法
格式:[对象名.]Print [输出项] 功能:将数据和文本输出到对象中。 说明:
[对象名.]:包括窗体、PictureBox控件、Printer和Debug。Printer和Debug本书中不作介绍。
[输出项]:由一个或多个用“;”(分号)和“,”(逗号)隔开的表达式组成。如果在Print后面没有跟任何[输出项],则表示将输出光标移到下一行。用逗号分隔时,各输出项占14个字符的位置(分区格式);用分号分隔时,各输出项之间无空格(紧凑格式)。
扩展性说明:
10
①对于数值型表达式,输出的数值尾部自动加一个空格,头部加一个符号位(正数为空格)。
②Print方法输出项的最后一项,如果没有任何符号,则该Print方法的下一个Print方法的第一项将换到下一行显示;如果输出项的最后一项后跟分号,则该Print方法的下一个Print方法将按紧凑格式输出;如果输出项的最后一项后跟逗号,则该Print方法的下一个Print方法将按分区格式输出。
③Tab(n):将输出项定位在相对于输出对象的第n个位置输出,从而实现定位输出。 ④Spc(n):在输出项之前输入n个空格,从而实现定位输出。
⑤Format(表达式,[,格式字符串]):使表达式的值按“格式字符串”指定的格式输出。 常用的格式字符串如表3.2.3所示。
表3.2.3 格式字符串
符号 作用 符号 作用 # #的个数决定显示数字的长度。如数字+,- 正、负号 的位数多于#的个数,显示的最后一位E+,E- 指数符号 四舍五入;如数字的位数少于#的个数,yy 两位数显示年份(00~99) 显示原数,不在显示的数字前后补0 mm 两位数显示月份(01~12) 0 与 与#功能相同,只是当数字的位数少于0dd 两位数显示日期(01~31) 的个数时,在显示的数字前后补0 yyyy 四位数显示年份(0100~9999) . 小数点 hh 两位数显示小时(00~24) , 千分位分隔符 nn 两位数显示分钟(00~59) % 百分比符号 AM/PM 以12小时方式显示时钟,午$ 美元符号 前为AM,午后为PM 例3.2.5 Print方法举例。程序代码如下:
Private Sub Form_Click()
Print 1; -2, \ '显示第一行,\后无任何符号,光标移到下一行 Print \
Print \ '\后为分号,\按紧凑格式输出
Print \ '\后为逗号,\按分区格式输出,
'\后无任何符号,光标移到下一行
Print 'Print后无输出项,光标移到下一行,从而产生一个空行 Print \
Print '\后为分号,本行的Print语句应按紧凑格式输出,
'但由于本行的Print方法后无输出项,所以光标移到\的下一行
Print \
Print Tab(4); \微软\ '从第4个位置开始显示“微软”
Print Spc(6); \程序设计\ '空6个空格,从第7个位置开始显示“程序设计”,
'一个汉字占2个字符的位置
Print Format(20.3456, \ '显示“+”号,少于#的个数,显示不变,
'多于#的个数,做四舍五入
Print Format(20.3456, \ '少于0的个数,用0补充,多于0的个做四舍五入Print Format(Now, \ End Sub
11
运行程序,单击窗体后,其结果如图3.2.6所示。 注意:
①为什么在“FFFFF”与“GGGG”之间有一个空行? ②为什么在“GGGG”与“HHH”之间无空行? ③为什么“程序设计”的显示在“软”字一半的位置? 2. Cls方法
图3.2.6 Print方法举例
格式:[对象名.]Cls
功能:清除运行时在对象中用Print输出的文本和用绘图方法(在第九章介绍)创建的图形,同时将坐标移到原点 (0,0)。
扩展性说明:
Cls只能清除Form窗体和Picturebox图片框中用Print方法显示的文本,或用绘图方法绘制的图形,而不能清除对象的Picture属性中的图像,清除Picture属性中的图像可用以下格式之一来实现:
[对象名.]Picture = LoadPicture(\ [对象名.]Picture = LoadPicture() [对象名.]Picture = LoadPicture [对象名.]Picture = Nothing 3. Move方法
格式:[对象名.] Move Left,Top,Width,Height
功能:移动窗体或控件。Move方法有四个参数,通过修改相应的参数,可以实现动画。四个参数中,Left为必要参数,不能少;Top、Width、Height为可选参数,若缺省,系统采用默认值。
例3.2.5 Move方法示例。在屏幕上移动窗体,程序运行时,每单击窗体一次,窗体向下移动200Twip。
移动窗体
由于只向下移动,因此只需修改Top参数的值,Form1.Top+200代表向下移动,如果是向上移动,则用Form1.Top-200。
选择事件驱动过程
单击窗体后,窗体才移动,故对象应选择Form,事件应选择Click(),所以事件驱动过程就应选择Form_Click()。
界面设计
窗体如果处于最大化,则窗体就无法在屏幕上移动,所以将Form1的MaxButton属性设置为False。
程序代码
Private Sub Form_Click() '单击窗体后,窗体才移动,故选择Form_Click() Form1.Move Form1.Left, Form1.Top + 200 End Sub 扩展性说明:
①在使用Move方法时,如果要改变了某一参数,位于该参数之前的参数不能省略,而在其后参数则可省略。因此,在本例中,Left 不能省略,而Width和Height则可省略。
12
②由于Form1为当前窗体,故Form1可以省略,或者用Me关键字,程序可简化为: Private Sub Form_Click() '单击窗体后,窗体才移动,故选择Form_Click() Move Left, Top + 200 或者
Me. Move Left, Top + 200
③窗体如果处于最大化,则窗体就无法在屏幕上移动。所以,设计界面时,在属性窗口中将Form1的MaxButton属性设置为False,使其无法最大化。
3.3 基本控件 控件是在图形用户界面上输入信息、输出信息、启动事件过程等交互操作的图形对象,是进行可视化程序设计的基础和重要工具。
VB 6.0的控件可分为三类:固有控件、扩展控件和可插入对象控件。固有控件也称为标准控件,指在VB启动后,在工具箱中的控件,不可删除;扩展控件保存在.ocx类型的文件中。应用程序在使用这类控件时,应先将其调入工具箱,然后才能使用,使用方法以与固有控件相同;可插入对象控件主要是指可插入Word、Excel等对象。 1. 控件的值
控件的值就是控件的一个属性,也称控件默认属性。一个控件只有一个属性可作为该控件的值。作为控件的值的属性在编写程序代码时可以省略,即可用控件名代替该属性。表3.3.1列出了部分控件的值。 2. 控件的容器功能
所谓容器,就是可以在其上放置其它控件对象的一种对象。容器内的所有控件成为一个组合,随容器一起移动、显示、隐藏等。若将容器的Visible属性设置为False,则容器及在它内部的所有控件,在程序运行时,均不可见;若将容器的Enabled属性设置为False,则容器及在它内部的所有控件
控件 PictureBox、Image Label、Frame TextBox
表3.3.1 部分控件的值
控件的值 Picture Caption Text HScrollBar、VscrollBar、Value CheckBox、OptionButton Timer
Enabled
在程序运行时,均显示为灰色。当控件被置于容器控件上时,该控件的位置参数以容器控件为参考系,并以容器控件设定的刻度为单位。在VB的标准控件中只有三个对象或控件具有容器功能,它们是窗体、图片框和框架。
3.3.1 标签控件
标签控件主要用于显示文字说明信息及程序运行的某些结果等。默认控件名为Label1、Label2、…。 1. 标签的属性
标签除了具有通用属性Name、Caption、Enabled、Visible、Height、Width、Top、Left、Font、ForeColor和BackColor外,还有自己独特的属性。
(1)Alignment属性
功能:确定标签中显示文本的对齐方式。该属性值为0,表示左对齐(默认值);为1,表示右对齐;为2,表示居中对齐。
(2)BackStyle属性
功能:设置标签背景是否透明。该属性值
为0,表示透明(默认值),标签后的背景
和图形可见;为1,表示不透明,标签后的背景和图形不可见。
13
(3)BorderStyle属性 功能:设置有无边框。 (4)Autosize属性
功能:确定标签是否会随标题内容自动改变大小(即调节水平方向的长度),以正好显示全部内容。该属性值为True,表示能自动调节且不换行;为False,表示不能自动调节(默认值),超出尺寸范围的内容不予显示。
(5)Wordwrap属性
功能:决定是否能自动调节垂直方向的高度,以正好显示全部内容。 扩展性说明
只有当Autosize和Wordwrap均为True时,显示在要标签中的文本才能实现自动换行。 注意:标签的Caption属性用来改变Label控件中显示的文本。Caption属性允许文本的长度最多为1024字节。缺省情况下,当文本超过控件宽度时,文本会自动换行;而当文本超过控件高度时,超出部分将被裁剪掉。 2. 标签的事件
标签可以响应许多事件,如常用的Click、DblClick等,用法与窗体的Click、DblClick事件类似。 3. 标签的方法
标签拥有Move方法,用法与Form的Move方法相同。
该属性值为0,表示无边框(默认值);为1,表示有边框。
3.3.2 文本框控件
文本框主要用于在窗体中显示和接收文本信息。在程序运行期间,用户可用鼠标、键盘在文本框中进行文字编辑。
1.文本框的属性
文本框的默认控件名为Text1、Text2…。文本框除具有通用属性Name、Enabled、Visible、Height、Width、Top、Left、Font、ForeColor和BackColor外,还有自己独特的属性。
(1)Text属性
功能:在文本框中显示的文本内容。 输入文本内容,也保存在Text属性中。
(2)PassWordChar属性
功能:设置文本框内容的显示形式(仅对单个文本有效),如果该属性值为空,表示正常显示形式(默认值);如果为一个字符,表示显示的内容均为该字符。设置PasswordChar属性为了掩盖文本框中输入的字符,主要用于密码程序中。
注意:
①PasswordChar属性的设置只有将MultiLine设为False才有效。 ②PasswordChar属性只能是一个字符。 (3)MultiLine属性
功能:决定是否能接收和显示多行文本。该属性值为True时,表示可接收和显示多行文本;为False(为默认值),表示只能接收和显示单行文本。
(4)MaxLength属性
功能:文本框中可接收和显示字符的最大长度。该属性值如果为n,表示可接收和显示的字符个数小于或等于n;如果为0,表示可接收和显示的字符数无限制。
其值为字符型,是默认属性。
注意:在文本框中显示的文本内容存放在Text属性中。当程序运行时,用户通过键盘
14
(5)ScrollBars属性
功能:确定文本框是否具有滚动条,只有当MultiLine为True时,该属性才有效。
该属性值为0,表示无滚动条;为1,表示只有水平滚动条;为2,表示有垂直滚动条;(6)Locked属性
功能:设置是否锁定文本框中的内容。该属性值为True,表示不能改变其中的内容;为False,表示可以改变其中的内容。
(7)SelStart、SelLength和SelText属性
功能:分别设置或返回文本框中选定文本的起始位置、长度和文本内容。
SelStart:确定在文本框选中文本的起始位置。第一个字符的位置为0(默认值)。若没有选择文本,则用于返回或设置文本的插入点位置,如果SelStart的值大于文本的长度,则SelStart取当前文本的长度。
SelLength:设置或返回文本框中选定的文本字符串长度(字符个数)。若未选定任何文本,则长度为0。
SelText:设置或返回当前选定文本中的文本字符串。 扩展性说明:
①在Text中输入多行文本时,应注意:
在设计阶段,通过属性窗口选择Text属性,并在其中直接输入,当需要换行时按 Ctrl+Enter键;也可通过编写程序实现,换行符为VbCrLf。 ②文本框无Caption属性。 2.文本框的事件
文本框除了能响应事件Click、DblClick外,还可响应其他事件。 (1)Change事件
当Text属性发生变化时,触发Change事件。 (2)GetFocus事件
当对象获得焦点时,触发GetFocus事件。(详见本章的焦点) (3)LostFocus事件
当对象失去焦点时,触发LostFocu事件。(详见本章的焦点) 例3.3.1 文本框输入数据举例。从文本框Text1中输入半径的值,单击窗体,计算圆的周长、圆的面积、球体的体积,并显示在标签框中;如单击文本框Text1,输入另外的半径值,则先清除原来的信息,再输入。程序运行结果见图3.3.1(要求计算球体的体积要保留二位小数,第三位四舍五入)。
计算
文本框的Text属性为字符型,用Val(Text1)将数字型字符串转换为数字。“&”运算符为字符串连接符。Int(v + 0.5) / 100可实现保留二位小数,第三位四舍五入。
Private Sub Form_Click()
r = Val(Text1) ' 输入半径 pi = 3.14 ' 圆周率
为3,表示有水平和垂直两种滚动条。
图3.3.1 文本框输入数据举例
15
c = 2 * pi * r: ' 计算圆的周长 Label1.Caption = c ' 显示圆的周长 s = pi * r ^ 2: ' 计算圆的面积 Label2.Caption = s ' 显示圆的面积 v = 4 / 3 * pi * r ^ 3 ' 计算球体体积
vc = Int(v + 0.5) / 100 ' 保留二位小数,第三位四舍五入 Label3.Caption = vc ' 显示球体体积 End Sub 清除
单击Text1清除,所以选择Text1_Click()事件。给Text1的Text属性及标签的Caption赋空串(\),实现清除。
Private Sub Text1_Click()
Text1 = \ ' 清除输入半径的文本框 Label1 = \ ' 清除显示周长的标签 Label2 = \ ' 清除显示面积的标签 Label3 = \ ' 清除显示体积的标签 End Sub
例3.3.2 文本框中选定文本举例。在文本框Text1中用鼠标选择一段文字,选择之后,便立即在Text2中输出。同时在Text3中显示起始位置,在Text4中显示选择字符的长度。 分析
在文本框中执行任何鼠标操作,当鼠标按键释放时,都会产生Click事件。用户在文本框Text1中按下鼠标的位置,将决定Text1的SelStart属性值,而拖动鼠标的距离,则决定SelLength属性值,进而把被选择的文字保存在它的SelText属性中。用Text3显示位置,用Text4显示选择字符的长度。
在窗体上创建四个文本框控件,保留它们的默认名称分别为Text1、Text2、Text3和Text4,并设置Text1和Text2的MultiLine属性为True,使之能够接收多行文本。Text1的Text属性值在设计阶段预先赋值。
为了使操作界面更便于用户理解,在四个文本框的上方各添加了一个标签,分别设置它们的Caption属性为“原文:”、“选择文本:”、“选择文本的起始位置:”和 “选择文本的起始的长度:”。
程序代码
Private Sub Text1_Click()
P = Text1.SelStart ' 鼠标操作决定SelStart和SelLength,进而决定SelText L = Text1.SelLength
Text2.Text = Text1.SelText ' 在Text2中显示被选定的文本
Text3.Text = P ' 在Text3中显示被选定的文本起始位置 Text4.Text = L ' 在Text2中显示被选定的文本的长度 End Sub
程序运行后,在Text1中用鼠标选中一段文字,当鼠标左键释放时,产生了Click事件。
16
在Text1_Click事件过程中,将Text1中被选择的字符串赋给Text2的Text属性,输出结果如图3.3.2所示。 3.文本框的方法
文本框能使用的方法不多,其中常用的是SetFocus。SetFocus方法的作用是把焦点移到指定的对象上,使之获得焦点,它适用于大部分可见控件,详细介绍见本章的焦点。
图3.3.2 在文本框中选择文本举例
3.3.3 焦点
焦点Focus是控件响应用户用鼠标或键盘输入的能力。当控件具有焦点时,可接收用户的输入。在Visual Basic 的一个窗体中,若有多个可以获得焦点的控件,如文本框TextBox,在程序运行时,只有字符输入光标所在的文本框具有焦点。只有具有焦点的控件才能接收用户从键盘输入的文本。 扩展性说明:
①只有当控件的Enabled 和 Visible 属性为 True 时,才可能获得焦点。
②在一个VB的窗体中,在同一时刻只能有一个控件具有焦点。一个控件获得焦点,则另一个控件就必然失去焦点。
③许多控件是可以拥有焦点的,但Label、Frame、Timer、Image、Line和Shape等控件不能接受焦点。
④窗体只有在不包含任何可以接受焦点的控件时,才能接受焦点。 控件获取焦点常用的方法有: ①运行时用鼠标单击,选中控件。 ②运行时按Tab键,切换焦点控件。 ③运行时用快捷键选中控件。
④在代码中用SetFocus方法,将控件置为获得焦点。 1. 焦点事件
(1)GotFocus事件
当控件获得焦点时触发GotFocus事件。 格式:
Private Sub 对象名_GotFocus ( ) :
End Sub
注意:GotFocus事件没有参数。常用于当控件获得焦点时进行的相关处理。 (2)LostFocus 事件
当控件失去焦点时,触发LostFocus事件。 格式:
Private Sub对象名_LostFocus ( ) :
End Sub 注意:
LostFocus事件没有参数。可用于在控件失去焦点时进行处理。比如:可以在控件失去焦点时改变其外观显示等。当其他控件获得焦点时,则当前控件失去焦点。
17
(3)SetFocus方法
功能:设置某个控件获得焦点。 格式:<对象名.> SetFocus 2. TabIndex属性
功能:设置或返回在容器中对象响应Tab键的顺序。改变TabIndex属性的值,就可改变焦点。
例3.3.3 焦点设置举例。在两个文本框Text1和Text2中,输入数据,单击显示结果的标签Label1,就会进行运算并显示,程序运行的结果如图3.3.3所示。
要求:当改变任意一个文本框的内容时,就清除运算结果,再次
图3.3.3 焦点设置举例
单击显示结果的标签框,才会进行运算并显示;当在某一个文本框输入数据时,如果按回车键,输入光标就自动移到另一个文本框中。
计算
单击显示结果的标签Label1后,计算并显示结果,所以选择事件过程为Label1 Click();由于Text属性是文本框的控件值,故可将Text属性省略,Val()函数将字符转换为数值。详细介绍见第四章。
Private Sub Label1_Click() '单击标签Label1,触发该事件 Label1 = Val(Text1) + Val(Text2) '计算并显示结果 End Sub 清除运算结果
当改变任意一个文本框的内容时,就清除运算结果,所以选择事件过程为Text1_Change()和Text2_Change();清除Label1中的信息,是将Label1的Caption属性设置为空;又由于Caption属性是标签的控件值,故可将Caption省略。
Private Sub Text1_Change() 'Text1中输入的数据发生改变,触发该事件 Label1 = \ '清除计算结果 End Sub
Private Sub Text2_Change() 'Text2中输入的数据发生改变,触发该事件 Label1 = \ '清除计算结果 End Sub 设置焦点
当在某一个文本框输入数据时,如果按回车键,输入光标就自动移到另一个文本框中,故选择Text1_KeyPress和Text2_KeyPress事件;用其中的KeyAscii参数的值来判断是否按回车键;用SetFocus方法来设置焦点。
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then '判断是否按了回车键 Text2.SetFocus '将另一个文本框设为焦点 End If End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If Chr(KeyAscii) = Chr(13) Then '判断是否按了回车键 Text1.SetFocus '将另一个文本框设为焦点 End If End Sub
18
3.3.4 命令按钮控件
命令按钮是以按钮的形式出现在窗体上。命令按钮是用户以交互方式执行选择操作的主要控件之一,应用十分广泛。
在程序运行期间,用鼠标单击命令按钮,会触发该命令按钮的Click事件,进而执行Click事件过程中的代码。 1.属性
命令按钮的默认控件名为Command1、Command2、…。命令按钮除了具有通用属性Name、Caption、Enabled、Visible、Height、Width、Top、Left、Font、ForeColor和BackColor外,还有自己独特的属性。
(1)Style属性
功能:设置控件的外观是标准的文本样式,还是图形样式。如果属性值为0,则表示标准的文本样式(默认值),只能显示文本;为1,表示图形样式,文本和图形均可显示。(2)Picture属性
功能:设置在命令按钮表面显示的图形。当Style为1时,Picture属性才起作用。 (3)DownPicture属性
功能:当按下鼠标键时,命令按钮表面显示的图形。当Style为1时,该属性才起作用。
(4)DisabledPicture属性
功能:当命令按钮暂不起作用时,命令按钮显示的图形。当Style为1,并且Enabled为False时,该属性才起作用。
(5)Cancel属性
功能:设置的取消按钮。当属性值设为True时,该命令按钮被设置为取消按钮。在一个窗体上不管目前哪个按钮具有焦点,只要用户按下“ESC”键,就相当于选择了该键。
注意:在一个窗体中只能有一个按钮的Cancel属性设置为True。
(6)Defualt属性
功能:设置默认的确定按钮。当属性值设为True时,该命令按钮被设置为默认的确定按钮。在一个窗体上可选择一个命令按钮作为默认的确定按钮,即不管窗体上当前哪个按钮具有焦点,只要用户按下“Enter”回车键,就相当于选择了该键。
注意:在一个窗体中只能有一个按钮的Default设置为True。 扩展性说明:
用“&+字母”为命令按钮设置快捷键。如命令按钮的Caption属性被设置为“清除(&C)”,则命令按钮表面显示为“清除(C)”,当用户按下Alt + C时,相当于选择该按钮。 2. 事件
命令按钮控件的最主要、最常用的事件是Click事件。在程序运行时,以下情况可以触发命令按钮的Click事件:
①用鼠标单击命令按钮。
②按Tab键或调用SetFoucs方法,将焦点移到命令按钮上,然后按Enter键。 ③按Alt+带有下划线的字母键。
④当命令按钮的Default属性为True时,按Enter键。
19
图3.3.4 标签、文本框和命令按钮
⑤当命令按钮的Cancel属性为True时,按Esc键。
例3.3.4 标签、文本框和命令按钮举例。在文本框Text1和Text2中,分别输入用户名和密码,选择“登录”按钮,判断用户名和密码正确性,并显示相应的登录信息。若正确,在标签Label3显示正确的登录信息,否则显示不正确信息,并自动选定用户名文本框的内容;重新输入用户名,将自动清除密码框和登录信息显示框中的内容。输入不正确的运行结果如图3.3.4所示。
要求:输入用户名和密码以回车键结束,同时将焦点向下移动。
分析
本例中解决问题的关键在于选择正确的事件过程。
①启动程序后,将光标移到用户名输入框,选择由VB系统自动触发的Form_Activate。 ②选择“登录”按钮,判断用户名和密码正确性,选择Command1_Click()事件。 ③输入用户名和密码以回车键结束,同时将焦点向下移动,选择Text1_KeyPress和Text2_KeyPress,在其中通过KeyAscii参数来判断是否输入回车键。
④重新输入用户名,将自动清除密码框和登录信息显示框中的内容,利用文本框的Change事件来触发,选择Text1_Change()。
程序代码
Private Sub Form_Activate()
Text1.SetFocus ' 启动程序后,将光标移到用户名输入框 Text2.PasswordChar = \ ' 设置密码框的显示方式
End Sub
Private Sub Command1_Click()
If Text1 = \ ' 判断输入的正确性 Label3 = \欢迎\登录!\ ' 用户名和密码正确,显示相应信息 Else
Label3 = \用户名或密码错!请重新输入\ ' 用户名或密码错,显示相应信息 Text1.SetFocus ' 移到焦点用户名输入框,为重新输入做准备
' 下两行完成文本框内容的选定,为重新输入做准备
Text1.SelStart = 0
Text1.SelLength = Len(Text1) ' Len()函数可获得文本框中输入内容的长度 Text2 = \ ' 清除密码框中的内容 End If End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then ' 判断是否输入回车键(它的Ascii码为13) Text2.SetFocus ' 移动焦点到密码框 ' 下两行完成文本框内容的选定,为输入做准备 Text2.SelStart = 0
Text2.SelLength = Len(Text2)
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库3章主讲(排)在线全文阅读。
相关推荐: