设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[OFFICE] VB 窗体的设计及应用

[复制链接]
跳转到指定楼层
楼主
发表于 2016-7-11 09:58:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  学习目标:
u 掌握窗体设计
u 掌握标准控件的应用
u 掌握多重窗体的设计与应用
u 掌握响应鼠标与键盘事件
u 掌握菜单的设计与应用

重点:窗体及常用控件的基本属性、事件和方法
难点:鼠标事件和键盘事件

窗体也称表单,它是VB应用程序运行时用户与应用程序之间交互的界面,用户主要通过窗体以及放在窗体上面的控件来与应用程序进行交互。所以说窗体是应用程序的操作平台。
  窗体是一种对象,是所有控件的容器。由属性定义其外观,由方法定义其行为,由事件定义其与用户的交互。
  控件是包括在窗体内的对象。每种类型的控件都有自己的一套属性、事件和方法,以适用于特定的目的。.1 窗体基本属性
.Name属性:即“名称”属性
在工程中添加的第一个窗体,其Name属性缺省值为Form1,添加的第二个窗体,其Name属性缺省值为Form2,……
也可给Name属性设置一个有实际意义的名称。
  .Caption属性
设置窗体的标题,即窗体标题栏中显示的文本,其缺省值为Name属性值。
  .Appearance属性
设置窗体表面的显示方式,0-平面,1-立体(缺省)。
  .AutoRedraw属性
设置窗体在屏幕上的重建方式。有两个值:True和False
.BorderStyle
设置窗体的边界样式。见表3-1(P.45)
.BackColor和ForeColor
BackColor决定窗体的背景颜色,缺省时为系统颜色中的按钮表面颜色。
  ForeColor决定窗体的前景颜色,即窗体中文本和图形的颜色。缺省时为系统颜色中的按钮文本颜色。
  .ClipControls
设置窗体重建时是只画新暴露部分还是重画整个窗体。(与AutoRedraw属性配合使用,见第九章)
.ControlBox
设置窗体的左上角是否放置控制框。True:有控制框,False:无控制框
.Enabled
设置激和或屏蔽窗体。True:缺省值,允许窗体对事件作出反应,False:该窗体不再对任何事件作出反应。
  .Visible
设置窗体是否看见。
  .Fontname、Fontsize、FontBold、FontItalic、FontStrikethru和FontUnderline
Fontname: 设置字体的类型
Fontsize: 设置字体的大小
FontBold: 设置黑体
FontItalic: 设置斜体
FontStrikethru: 设置比划体(删除线)
FontUnderline: 设置下划线
【注意】上述与字体有关的属性如何设置?
  ?界面设计时,在属性窗口中找到Font属性来设置;
  ?代码设计时,才分别引用这些属性名来进行设置。
  .Height和Width
设置整个窗体的高度和宽度。
  .KeyPreview
决定是窗体还是具有焦点的控件响应键盘事件。
  False:默认值,只有窗体具有焦点时才引发键盘事件;True:由窗体响应键盘事件。
  .Left和Top
设置窗体左边沿和上边沿的坐标。
  MaxButton和MinButton
设置窗体右上边是否有最大/最小按钮
.Picture
设置窗体中要显示的图形,设置时只需指明图片所在位置及文件名即可。如果界面设计时设置了Picture属性,图片被保存起来并与窗体同时加载。
  .ScaleHeight和ScaleWidth
设置窗体内部容器可用区域的高度和宽度。
  .ScaleLeft和ScaleTop
设置窗体内部容器可用区域左上角的坐标,缺省值为(0,0)
.WindowState
设置窗体的状态,有三个值:0(缺省值)- 一般;1-最小化;2-最大化
.CurrentX
设置在窗体上输出文本或图形时的起始X坐标。
  .CurrentY
设置在窗体上输出文本或图形时的起始Y坐标。.2 窗体常见事件.2.1 鼠标事件 概述
与窗体相关的鼠标事件有五个:Click,DblClick,MouseDown,MouseUp和MouseMove。
  注意:鼠标事件以及后面要介绍的键盘事件并不是窗体独有的,其他控件也支持鼠标事件和键盘事件。
  当鼠标指针位于窗体上方时,窗体将识别鼠标事件;当鼠标指针位于控件上方时,控件将识别鼠标事件。
  .Click事件:对一个窗体对象来说,当用左键或右键单击窗体空白区域或一个无效控件时发生;对一个控件来说,当用左键或右键单击该控件时发生,但对CheckBox,CommandButton,ListBox或OptionButton控件来说,Click事件仅当单击左键时发生。
  .DblClick事件:对一个窗体对象来说,当用左键或右键双击窗体空白区域时发生;对一个控件来说,仅当双击左键时发生。如果DblClick事件在系统双击时间限制内没有出现,则对象识别为两个Click事件。
  .MouseDown事件:按下任意鼠标按钮时发生。
  .MouseUp事件:释放任意鼠标按钮时发生。
  .MouseMove事件:每当鼠标指针移动到屏幕新位置时发生。
  它们之间的联系和区别:
⑴ 单击鼠标,按顺序引发的事件过程为:MouseDown ,MouseUp 和Click;
  单击鼠标时还移动鼠标,则按顺序引发的事件过程为:MouseDown ,MouseUp ,Click 和MouseMove。
  ⑵ 双击鼠标,按顺序引发的事件过程为:MouseDown ,MouseUp ,Click,DblClick和MouseUp;
  双击鼠标时还移动鼠标,则按顺序引发的事件过程为:MouseDown ,MouseUp ,Click,MouseMove,DblClick和MouseUp。
  ⑶ Click事件和DblClick事件不能识别当事件发生时鼠标指针的位置;而MouseDown ,MouseUp , MouseMove等不仅能识别当事件发生时鼠标指针的位置,还能识别各鼠标按钮以及是否同时按下了键盘上的Shift、Ctrl、Alt键。
  MouseDown ,MouseUp , MouseMove等事件的参数如下表:



参数


说明


备注



Button


一个位域参数,其二进制低三位描述鼠标按钮状态—左(1)—右(2)—中(4)



Shift


一个位域参数,其二进制低三位描述事件发生时键盘上Shift、Ctrl、Alt键的状态—Shift(1)—Ctrl (2)—Alt (4)



X,Y


事件发生时鼠标指针的位置坐标





注意:上述五个鼠标事件的事件过程的格式,见P.48~P.49。 MouseDown事件
当按下鼠标按钮时就可触发此事件。
  ?结合Move方法使用MouseDown事件
例: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Command1.Move X, Y
End Sub
Move方法可将命令按钮移动到窗体的不同位置,单击窗体时鼠标指针的位置(X,Y)决定命令按钮的新位置。(X,Y)决定命令按钮的左上角坐标。可上机试。
  ?结合Line方法使用MouseDown事件
语句: Line (X1, Y1)-(X2, Y2)
功能: 绘制一条从点(X1, Y1)到点(X2, Y2)的直线。
  语句: Line -(X2, Y2)
功能: 绘制一条从上次绘制点到点(X2, Y2)的直线。
  例: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
End Sub
上述程序运行的结果是:只要按下鼠标,就会绘制一条从上次绘制点到鼠标当前位置的直线。第一条直线始于缺省起点,也就是窗体的左上角。
  (上机试。) MouseUp事件
当释放鼠标按钮时发生此事件。
  MouseUp事件往往与MouseDown事件或MouseMove事件配合使用。看下面的例子:(上机试。)
Option Explicit
Private x1, y1

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1 = X
y1 = Y
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line (x1, y1)-(X, Y)
End Sub

上机运行结果如下:画直线,在鼠标被按下的位置画一个端点,在鼠标松开的位置画另一个端点。 MouseMove事件
当鼠标指针在屏幕上移动时就会引发MouseMove事件。
  例1 结合Line方法使用MouseMove事件
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
End Sub
注意: ⑴此例的运行结果是曲线。(当然,从微分的角度看也是线段。)上机试。
  ⑵当鼠标指针移过屏幕时要调用多少次MouseMove事件?并不是对鼠标经过的每一个像素都会产生MouseMove事件,操作环境每秒生成有限多个鼠标消息。
  例2 下例程序在每次识别MouseMove事件之处,都绘制一个小圆圈。因此,可观察到在一段时间内实际上有多少次MouseMove事件发生。(上机试。)
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
Circle (X,Y),50
End Sub
上机运行结果:鼠标指针移动得越快,在任意两点之间所能识别的MouseMove事件越少。众多圆圈挤在一起表明鼠标在此位置移动缓慢。
  例3 MouseMove事件往往也与MouseDown事件或MouseUp事件配合使用。
  Dim Drawnow As Boolean

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Drawnow = True
CurrentX = X
CurrentY = Y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Drawnow Then Line -(X, Y)
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Drawnow = False
End Sub

例3的运行结果:只有按下鼠标任意按钮时才绘线(曲线),而在释放按钮时停止绘线。.2.2  检测鼠标按钮
可用Button参数的返回值来判断鼠标事件发生时按下或释放了哪个鼠标按钮。
  Button参数是位域参数,其每位代表一个状态。Button参数的最低三位分别表示鼠标的左键、右键和中键。
  Button参数一般可用十进制数值或常数来表示,如下表:



二进制值


十进制值


常数


意义


适用事件





未按下或释放任何按钮


MouseMove、MouseDown、MouseUp


vbLeftButton


按下或释放左键


MouseMove、MouseDown、MouseUp


vbRightButton


按下或释放右键


MouseMove、MouseDown、MouseUp


vbMiddleButton


按下或释放中键


MouseMove、MouseDown、MouseUp





同时按下左、右键


MouseMove





同时按下左、中键


MouseMove





同时按下中、右键


MouseMove





同时按下左、右、中键


MouseMove


注意: ⑴在MouseDown事件中使用Button参数可判断按下了哪个按钮;在MouseUp事件中使用Button参数可判断释放了哪个按钮。
  ⑵对每一个MouseDown事件或MouseUp事件只设置一位,故无法检测是否同时按下了两个以上按钮;如果同时按下多个按钮,Viaual Basic会将此操作解释为两个或多个独立的事件。
  ⑶可用MouseMove事件检测是否同时按下了两个或两个以上按钮。
  例1  Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = Then Print "你按下了左键"
If Button = Then Print "你按下了右键"
If Button = Then Print "你按下了中键"
End Sub

例2 Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = Then Print "你释放了左键"
If Button = Then Print "你释放了右键"
If Button = Then Print "你释放了中键"
End Sub

例3 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = Then Print "你仅按下了左键"
End Sub
注意: ⑴一次MouseMove事件可以设置Button参数的所有位或某些位,而不是只能设置一位。
  ⑵例3的运行结果:如果仅按下左键,则显示上述信息。但如果同时按下左键和右键,则不显示任何信息。
  例4 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And Then Print "你按下了左键"
If Button And Then Print "你按下了右键"
End Sub
注意: ⑴例4的运行结果:只要按下左键,就显示信息,而不管是否同时按下其他键。
  ⑵此例应使用And操作符。
  例5 综合练习题:以例3为基础,编写一个应用程序,要求只有按下鼠标左键时才绘线(曲线),而在释放左键时停止绘线;按下鼠标右键时画直线。此题要求同学们上机操作。
  参考答案:(实例演示:见VB上机讲义实验二演示)
Dim drawnow As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = Then
drawnow = True
CurrentX = X
CurrentY = Y
End If
If Button = Then
Line -(X, Y)
End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If drawnow Then
Line -(X, Y)
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
drawnow = False
End Sub.2.3 检测Shift、Ctrl及Alt键的状态
鼠标事件和键盘事件都用Shift参数判断事件发生时是否按下了Shift、Ctrl和Alt键,以及以什么样的组合按下这些键。
  Shift参数的取值及意义如下表:



二进制值


十进制值


常数


意义





未按下任何键


vbShiftMask


按下Shift键


vbCtrlMask


按下Ctrl键


vbAltMask


按下Alt键





同时按下Shift、Ctrl键





同时按下Shift、Alt键





同时按下Ctrl、Alt键





同时按下Shift、Ctrl、Alt键


说明:使用Shift参数的方法与Button参数相同。
  例1: VB6.0编程实用教程P.222
Option Explicit
Dim Shifttest As Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shifttest=shift And
Select Case Shifttest
Case
Print "你按下了Shift键"
Case
Print "你按下了Ctrl键"
Case
Print "你按下了Alt键"
Case
Print "你按下了Shift和Ctrl键"
Case
Print "你按下了Shift和Alt键"
Case
Print "你按下了Ctrl和Alt键"
Case
Print "你按下了Shift、Ctrl和Alt键"
End Select
End Sub.2.4 键盘事件 几个概念
⑴焦点
指当前处于活动状态、能接受键盘事件的窗体或控件。
  Windows虽允许同一时刻有多个程序一起运行,但只允许其中有一个窗口处理键盘事件,而其他窗口则得不到键盘输入,这个能接受键盘输入的窗口就是当前窗口,当前窗口的标题栏是加亮显示的。
  即便对于当前窗口而言,它也可能含有多个能进行输入的部件(窗体或控件)。Windows规定当前窗口中也只能有一个部件能接受键盘事件,而其他部件则不能接受键盘输入、响应键盘事件。称这个能处理键盘事件的部件“拥有输入的焦点”,简称“具有焦点”;而称那些不能接受键盘输入的部件“不具有焦点”。
  ⑵ 改变焦点的方法
对用户而言,若想改变焦点,可使用鼠标单击的方法。
  对程序员而言,若想使用代码改变焦点,可使用SetFocus方法。其用法是:
部件名.SetFocus
注意:SetFocus方法只适用那些Enabled和Visible属性为True的对象部件。 键盘事件概述
窗体和控件能识别的键盘事件有三种:
KeyPress事件: 按下某个ASCII码对应的键
KeyDown事件:按下任意键(键盘上的物理键)
KeyUp事件: 释放任意键
说明:⑴只有获得焦点的对象才能够接受键盘事件。
  ⑵键盘事件彼此并不排斥,而是有联系的。当按下某一键时,将依次发生KeyDown事件和KeyPress事件,而松开此键后发生KeyUp事件。
  ⑶KeyDown事件和KeyUp事件提供最低级的键盘响应,如Shift、Ctrl和Alt键的组合、箭头键、PageUp和PageDown、区分数字小键盘的数字键与打字键盘的数字键,还有一些功能键。而KeyPress事件检测的键只对应于所有标准的ASCII字符,如KeyPress事件对F1、Ctrl、Shift及Alt等不响应。
  ⑷KeyDown事件和KeyUp事件分别响应按下键的操作和释放键的操作,而KeyPress事件只响应按下键操作。
  ⑸KeyDown事件和KeyUp事件的返回参数有两个:KeyCode、Shift,而KeyPress事件的返回参数只有一个:KeyAscii。
  ⑹一般情况下应首先使用KeyPress事件,当KeyPress事件的功能不够使用时,才考虑使用KeyDown事件和KeyUp事件。 KeyPress事件
当按下与ASCII字符对应的键时发生。
  一般情况下,要处理标准ASCII字符时都要使用KeyPress事件。KeyPress事件能区别大小写字符。
  例1: Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
运行结果:文本框Text1中输入的所有字符都强制转换成大写字符。
  说明: ⑴KeyPress事件的返回参数只有一个:KeyAscii ,其返回的是对应于按键的ASCII码的十进制值。
  ⑵Chr函数将ASCII字符代码转换成对应的字符;
  UCase函数将字符转换成大写字符;
  Asc函数将字符转换成对应的ASCII码。 KeyDown事件和KeyUp事件
KeyDown事件和KeyUp事件报告键盘按键准确的物理状态:按下或松开。
  与此对照的是,KeyPress事件并不报告键盘状态,不能识别键的按下或松开状态。
  KeyDown事件和KeyUp事件提供两个参数KeyCode和Shift来返回输入字符的信息,如下表:

参数 说明
KeyCode 指示按下的物理键的键代码(此时“A”与“a”作为同一个键返回)
Shift 指示Ctrl、Shift及Alt键的状态

KeyDown事件和KeyUp事件的事件过程的格式:见教材P.47

例1  Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA Then
MsgBox "你按下了A键"
End If
End Sub

说明:⑴功能键F1的键代码是vbKeyF1,Home键的键代码是vbKeyHome,……
⑵KeyCode参数只能识别物理键,不能识别大小写。如果要判断输入的字符是大写形式或小写形式,需使用Shift参数。(见下例)
⑶键盘事件使用Shift参数的方法与鼠标事件相同。(见上节3.2.3)

例2  Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift =1 Then
MsgBox "你按下了大写A键"
End If
End Sub

例3 Dim shiftkey As Integer
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
shiftkey = Shift And
Select Case shiftkey
Case
Print "你按下了Shift键"
Case
Print "你按下了Ctrl键"
Case
Print "你按下了Alt键"
Case
Print "你按下了Shift和Ctrl键"
Case
Print "你按下了Shift和Alt键"
Case
Print "你按下了Ctrl和Alt键"
Case
Print "你按下了Shift、Ctrl和Alt键"
End Select
End Sub

例4 讲解习题二:第2题(教材P.44),要求输入成绩后按回车,马上就在另一个文本框中显示该分数对应的等级。
  有关程序代码参看:VB上机讲义实验二演示工程一。.2.5 其他窗体事件
Visual Basic程序是由事件驱动的,编写一个VB程序的最主要工作就是为大量事件编写程序代码。
  当用户开始运行只有一个普通窗体的应用程序时,一般会依次发生以下四个事件:Initialize,Load,Activate和GotFocus事件。 Initialize事件
首先触发的是Initialize事件,它是在窗体作为一个对象被第一次创建时触发,此时窗体并没有成型。因此,在此事件过程中通常是一些设置窗体属性的代码,其格式为:
Private Sub Form_Initialize()
……
End Sub Load事件
此事件在Initialize事件发生后非常短的时间内,在窗体被载入内存时发生。在此事件过程中,通常指定控件的初始设置值。例如,指定要装入ComboBox或ListBox控件的列表项内容,或给窗体级变量赋初始值等等。其格式为:
Private Sub Form_Load()
……
End Sub

例1: Private Sub Form_Load()
List1.AddItem "星期一"
List1.AddItem "星期二"
List1.AddItem "星期三"
List1.AddItem "星期四"
List1.AddItem "星期五"
List1.AddItem "星期六"
List1.AddItem "星期日"
MsgBox "Form1正在被卸载!"
End Sub
运行结果:当Form1被加载时,通过使用AddItem方法,将七个列表项添加到列表框List1,MsgBox函数的功能是在屏幕上显示消息。 Activate事件
当只有一个窗体时,则此窗口一定是活动的,所以会引发Activate事件。在此事件过程中,可以在窗体上输出文本或图形。其格式为:
Private Sub Form_Activate()
……
End Sub GotFocus事件
此事件在窗体(而非其他控件)获得焦点时发生。
  说明:在程序运行中,当控件或窗体用户通过单击的方法使控件或窗体首次获得焦点时,将先引发Click事件,然后引发GotFocus事件;但是一旦控件已经获得焦点,则再次单击控件时,将只发生Click事件。 LostFocus事件
此事件在窗体失去焦点时发生。 Deactivate事件
此事件在窗体不再是活动窗体时发生(在LostFocus事件之后)。 QueryUnload事件
当用户关闭窗体时,会依次激发QueryUnload、Unload和Terminate事件。
  QueryUnload事件在Unload事件之前发生,此事件的典型用法是在关闭一个应用程序之前用来确保包含在该应用程序中的窗体是否还有未完成的任务。例如,如果还未保存某一窗体中的新数据,则应用程序会提示保存该数据。其格式为:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
……
End Sub Unload事件
Unload事件的引发原因与QueryUnload事件相同,当窗体从内存中卸载时发生。
  一般来说,可用一个Unload事件过程来确认窗体是否应被卸载或用来指定想要发生的操作。
  例2:  Private Sub Form_Unload(Cancel As Integer)
MsgBox "本窗体正在被卸载!", "Unload事件"
End Sub
运行程序,单击标题栏上的关闭按钮,会弹出一个消息框。 Terminate事件
当窗体从内存中卸载完时发生。其格式为:
Private Sub Form_Terminate()
……
End Sub
注意:用End语句来结束应用程序,这三个事件:QueryUnload、Unload和Terminate事件均不会发生。 Resize事件
当改变一个窗体的大小时发生。
  例如,拖动一个窗体的边框,或者一个窗体被最大化、最小化或还原。当父窗体调整大小时,可用Resize事件过程来移动控件或调整控件大小,也可用此事件过程来重新计算那些变量或属性。
  例3  Private Sub Form_Resize()
Command1.Left = (ScaleWidth - Command1.Width) /
Command1.Top = (ScaleHeight - Command1.Height) /
End Sub
运行结果:当调整窗体的大小时,命令按钮一直保持在窗体中央。 Paint事件
在一个对象被移动或放大之后,或覆盖现象结束之后,或使用Refresh方法时,将引发Paint事件。
  在Paint事件过程中,通常编写需要重新绘制图形的代码。但若AutoRedraw属性被设置成True,重新绘图会自动进行,于是就不需要Paint事件过程。.2.6 窗体的方法 Cls方法
该方法清除窗体上所有的图形和文本。其格式为:
窗体名.Cls Print方法
向窗体输出表达式的值。其格式为:
对象名.Print {Spc(n)|Tab(n)} expression charpos
说明:⑴Spc(n)表示插入n个空白字符。
  ⑵Tab(n)表示将插入点定位在绝对列号为n的列上。
  ⑶charpos参数指定下次打印时插入点的位置。有三个取值:
;————接在上次打印的字符之后
Tab(n)——定位在绝对列号为n的列上。
  Tab ——定位在下个打印区的起始位置。 Load语句
用来将窗体或控件载入内存。格式为:
Load 窗体名或控件名
说明:此语句只是把窗体载入内存,窗体在屏幕上并不可见,但此时可任意操作该窗体。
  注意:当程序开始执行时,只有设置为启动对象的那个窗体会自动载入内存并在屏幕上显示,且自动引发该窗体的Load事件。
  其他窗体要载入内存,必须通过Load语句或Show方法一个个地载入。 Show方法
用Load语句加载窗体时并不显示它,仅把它装入内存。为了在屏幕上显示窗体,应使用Show方法。调用Show方法与设置窗体Visible属性为True具有相同的效果。其格式为:
窗体名.Show [0/1]
  默认值为0,表示以非模态形式显示窗体,即能通过鼠标将焦点转移到其他窗体上。
  例4 用户单击一个名为Cmdsport的按钮,则显示一个名为Frmsport的对话框,在该对话框中提供一个运动项目列表。
  Private Sub Cmdsport_Click()
Load Frmsport '首先加载窗体
Frmsport!Lstsport.AddItem "足球" '为窗体中的列表框控件添加项目
Frmsport!Lstsport.AddItem "篮球"
Frmsport!Lstsport.AddItem "排球"
Frmsport.Show '在屏幕上显示窗体
End Sub

注意: 若事先没有用Load语句加载窗体,当直接使用Show方法时也能先加载窗体并显示窗体。为何一般都是先使用Load语句加载窗体再使用Show方法显示窗体,而不是直接使用Show方法呢?
  其一,用户希望加载窗体时隐藏它,这样用户可以对窗体及窗体中的控件进行设置和操作,待完成后再显示窗体;
  其二,如果窗体已经事先加载,则再使用Show方法时窗体的显示速度会更快。 Hide方法
如果希望从屏幕上隐藏一个窗体,而在内存中保留它以便能继续使用,应使用Hide方法。调用Hide方法与设置窗体Visible属性为False具有相同的效果。其格式为:
窗体名.Hide
说明:⑴窗体被隐藏后,下次执行Show方法或Load语句时,不会再次引发该窗体的Load事件。
  ⑵若执行Hide方法时,窗体未事先装入内存,则此时会先加载窗体再隐藏该窗体。 Unload语句
将窗体从内存中卸载。其格式为:
Unload 窗体名
例如: Unload Me
说明:⑴窗体被卸载后,下次执行Show方法或Load语句时,会将窗体再次装入内存并引发该窗体的Load事件。
  ⑵窗体从内存中被卸载前,会引发QueryUnload和Unload事件。.2.7 图象处理
程序运行时若要在窗体中加入背景图案,可通过Loadpicture函数实现。其格式为:
对象名.Picture = Loadpicture("文件名")
上式中,对象名可以是窗体、图片框或图像框,缺省时为窗体。“文件名”为文件全名。
  说明: ⑴可在界面设计阶段设置窗体的Picture属性,此时图片会被保存并与窗体同时加载;如果在程序运行时通过Loadpicture函数来加载图片,该图片不和应用程序一起保存。
  ⑵可使用Savepicture语句来保存某个对象的图片属性。其格式为:
Savepicture 对象名.属性名, "文件名"
保存Picture属性中的图片时,若原文件是位图、图标、元文件或增强元文件,则图片将以原始文件的格式保存;若原文件是GIF或JPEG文件,则图片保存为位图文件。
  另外,Image属性中的图片总是以位图(.bmp)的格式保存,而不管其原文件的格式。.2.8 多窗体设计
对于多窗体设计,VB提供了多重窗体设计方法和多文档界面设计方法,两者的区别是:
⑴多重窗体设计方法中,多个窗体之间是并列的关系。
  ⑵多文档界面设计方法中,多个窗体中只有一个MDI窗体,称为父窗体,其他窗体称为子窗体。MDI窗体与子窗体之间是包含与被包含的关系。子窗体最小化后,它的图标显示在MDI窗体用户区的底部;子窗体最大化后将填满MDI窗体的整个工作区,此时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏。如图3-1、图3-2、图3-3所示。(教材P.53) 多重窗体设计方法
添加多个窗体的方法是:
⑴单击“工程”菜单的“添加窗体”命令。
  ⑵选择启动窗体,即程序从哪个窗体开始执行。默认的启动窗体为Form1,若要改变启动窗体,方法是:单击“工程”菜单的“工程1属性”命令,在“启动对象”栏中选择启动窗体。
  例1:设计一个含三个窗体的项目,进行学生成绩登记。(教材P.54) 多文档界面设计方法
⑴设计步骤:
l 新建一个工程(此时已有一个窗体Form1)
l 单击“工程”菜单的“添加MDI窗体”命令
l 在MDI窗体中设计一个“窗口”菜单,用来管理子窗体。
  l 将Form1的MDIChild属性设置为True。
  l 若还想添加子窗体,则单击“工程”菜单的“添加窗体”命令,再将它的MDIChild属性设置为True。
  ⑵相关属性和方法
l ActiveForm属性
MDI窗体的属性,返回具有焦点或最后被激活的子窗体。
  l ActiveControl属性
MDI窗体的属性,返回活动子窗体上具有焦点的控件。
  例:要引用活动子窗体上具有焦点的控件,可用下列代码:
MDIForm1.ActiveForm.ActiveControl

l AutoShowChildren属性
MDI窗体的属性,控制装载子窗体时是否自动显示子窗体。有两个值:True和False。
  l WindowList属性
菜单的属性,在菜单编辑器中设置。(教材P.121)
l Arrange方法
MDI窗体的属性,排列MDI窗体中的子窗体。其格式为:
MDI窗体名.Arrange 排列方式值
排列方式值的取值及含义见下表:



排列方式值


常量


说明


vbCascade


级联方式排列子窗体


vbTileHorizontal


水平方式排列子窗体


vbTileVertical


垂直方式排列子窗体


vbArrangeIcons


图标方式排列子窗体


l Zorder方法
子窗体的方法,调整子窗体的位置。其格式为:
[子窗体名].Zorder [位置值]
  说明:子窗体名省略时,表示当前活动子窗体。
  位置值有两种:0和1。0为缺省值,表示将此子窗体移动到最前端同时为活动子窗体;1表示将子窗体移到后方。 多文档界面设计时的注意事项
⑴加载和卸载
加载子窗体时,一定会加载MDI窗体;而加载MDI窗体时,不会加载子窗体。
  关闭MDI窗体时,首先引发MDI窗体的QueryUnload事件,接着是子窗体的QueryUnload事件,然后是子窗体的Unload事件,最后是MDI窗体的Unload事件。
  ⑵设计MDI窗体的限制:
一个应用程序只能有一个MDI窗体。
  有Align属性的控件和具有无界面的控件可以放置于MDI窗体,而其他控件不可。
  ⑶设计子窗体时不能有菜单。
  注意:Align属性是PictureBox和Data等控件的属性,用于确定控件在窗体上的位置。.3 文本框

对于程序设计人员来说,程序窗口中包含的菜单、按钮、列表等,尽管从外表和功能上有很大区别,但都是一个个的对象(既有属性又有事件)。在Visual Basic中,把菜单、按钮、列表等对象称为控件。
  下图显示了Visual Basic.0的标准工具箱(控件箱):

文本框是一个非常重要的控件,它为用户提供了输入信息(如密码)和显示信息的场所,且在文本框内,可做与文本编辑有关的动作,如剪切、复制、粘贴、选定文本、删除等操作。
  文本框的缺点是不能接受太大的数据。.3.1 基本属性
l Alignment属性:默认值,左对齐
控制控件上显示文本的对齐方式:右对齐:居中对齐
l HideSelection属性
控制文本框失去焦点时,文本框内被选择的文本是否仍以反白方式显示。默认值为True,即不再以反白方式显示。
  l MultiLine属性
设置是否能接收多行文本,缺省值为False,表示只允许输入单行文本。若设置为True时,可自动换行和回车换行。
  l PassWordChar属性
设置保密字符,一般设为“*”。
  当设置该属性时,文本的接收、存储皆为输入的正文,但在屏幕上显示的却是设置字符的连续显示。(如一连串的“*”)
l ScrollBar属性
设定文本框中是否出现水平或垂直滚动条,此属性只能在设计模式下设定,且MultiLine属性为True时才有效。
  此属性有4个值:0 ——不要滚动条 ——要水平滚动条 ——要垂直滚动条 ——要水平和垂直滚动条
l Enabled属性
确认文本框是否能输入信息,缺省值为:True 。
  l Text属性
存放文本框中显示或输入的文本。
  l SelLength、SelStart和SelText属性
这三个属性用来实现文本编辑的许多功能,它们即可用于返回值,也可用于设置值。
  (1)当用于返回值时(即选定一段文本后):
SelLength ——返回文本框内反白区域的字符串长度。
  SelStart ——返回文本框内反白区域的起始位置。
  SelText ——返回文本框内反白区域的字符串内容。
  (2)当用于设置值时:
SelLength ——设置所选择的字符数。
  SelStart ——设置所选择文本的起始点(从0开始)。
  SelText ——设置替换前所选择文本的字符串内容。
  [注意]:这三个属性在设计时不能设置,只能在程序中进行读写。.3.2 基本事件
文本框常用的事件有:Click , DblClick , GotFocus , LostFocus , 及Change等事件。、Change事件
当用户改变文本框内容或用代码改变Text属性值时会引发Change事件,其过程为:
Sub 文本框名_Change( )
……
End Sub、GotFocus和LostFocus事件过程
文本框获得焦点或失去焦点时分别引发的事件过程。
  ①按[Tab]键
文本框获得焦点的方法 ②用鼠标单击
③在代码中使用SetFocus方法.3.3 基本方法
l SetFocus方法
该方法用于使对象获得焦点,其格式为:
对象名. SetFocus.3.4 举例1:
设计一个简易写字板……
见教材P.61~64
举例2:(讲完“标签”一节后再讲)
设计一个程序……
见教材P.64~66.4 标签(Label)
标签也是显示文本信息的一个控件,但运行时用户不能输入任何信息,也不能修改、编辑。
  因此,标签通常用来作注释或显示数据结果。
  标签的常用属性:
l Autosige属性
控制标签的大小是否随文本长度的变化而水平扩充。默认值为:False,即标签大小不会随文本长度的改变而改变。
  l Backstyle属性(背景状态)
控制标签控件的背景是否要变成透明,其值有0和1两种。默认值为1(不透明)。
  l Borderstyle属性(边框风格)
确定标签是否有边框,其值有0和1两种。默认值为0(无边框)
l Caption属性(设置标题)
确定标签显示的文本,其长度1000个字符。
  可在设计状态下从属性窗口中设置该属性;也可在运行过程中通过下列语句来修改标签显示内容: 标签名.Caption = 显示的文本串
l WordWrap属性(文本回绕)
使用该属性的前提是Autosige属性值为True。
  当文本超出标签范围,该属性为False(默认值)时,标签沿水平方向扩展;否则,沿垂直方向扩展。
  举例:见教材P.64. (例2).5 命令按钮(CommandButton).5.1 基本属性
l Caption属性
设置命令按钮上显示的文本。
  [注意]:(1)可通过Caption属性创建命令按钮的访问键快捷方式。
  方法是:将标题中某一字符前加上“”字符,使构成该命令按钮的热键,运行时,该字符带下划线。
  例: Command
程序运行时,命令按钮上显示“Command”。
  可用Alt+C来选定该命令按钮。
  (2)若不想创建访问键,又要使标题中包含“”字符,则应添加两个连字符“”,这样,在标题中就只显示一个连字符,而不显示下划线。
  l Default属性
设置哪一个命令按钮为窗体的缺省按钮(设置为True)
[注意]:(1)一个窗体中只能有一个命令按钮为缺省按钮。
  (2)某个命令按钮的Default设置值为True时,窗体中其它的命令按钮自动设置为False。
  (3)当命令按钮的Default设置为True且所在窗体是活动的,且焦点不在别的命令按钮上,用户可按Enter键来引发此缺省按钮的Click事件过程。
  (4)若焦点在同一窗体的另外一个命令按钮上,按Enter键选择有焦点的命令按钮。
  l Enable属性
该属性有两个值:True(默认值)和False。
  该属性决定按钮是否有效,值为True时有效。
  l Cancel属性
命令按钮的Cancel属性设置为True时,该按钮是取消按钮。此时,不论该按钮是否具有焦点,按[ESC]键均相当于单击该按钮。
  [注意]:(1)窗体中只能有一个按钮设置为取消按钮(值为True)。
  (2)当一个命令按钮的,同一窗体中其它命令按钮的Cancel属性自动地设置为False。
  (3)该取消按钮的功能是:使用户可以取消还未确认的改变,并把窗体恢复到先前状态。
  l Value属性
该属性返回命令按钮的状态: 为True时,表示按钮被按下
为False时,表示按钮未被按下
该属性在设计状态下无效。.5.2 Tab顺序、 基本控件中除计时器、菜单、框架和标签外,都可以具有焦点。凡是需要和用户交互的控件都能拥有焦点。、 获得焦点的方法
(1) 鼠标单击控件
(2) 按[Tab]键、 通常情况下,[Tab]键的游走次序和控件建立的顺序一致,但可通过控件的TabIndex属性来改变游走的顺序。
  例1:在窗体上先后建立了Text1、Text2、Command1等三个控件,则这三个控件的TabIndex值分别为:0、1、2。按[Tab]键时,这三个控件获得焦点的顺序为:
Text1 , Text2 , Command1
例2:若想改变上述三个控件获得焦点的顺序,则可在设计状态或程序代码中改变这三个控件的TabIndex值。、 具有TabIndex属性的控件还有一个属性TabStop,其缺省值为True。若某个控件的TabStop值设置为False,则按[Tab]键时,焦点将不会在此控件上停留。.5.3 举例:
设计一个电话号码的输入……
见教材P.68. 起.6 水平/垂直滚动条
滚动条是用来协助观察数据和调整数据的工具,一般不需知道具体的数值。滚动条有两种:水平滚动条和垂直滚动条。.6.1 基本属性
l max和min属性
这两个属性分别规定了滚动条滑块位于最左边(下边)和最右边(上边)时的值,即规定了滚动条的取值范围。
  VB规定:max和min属性的设置值必须在-32768到32768之间。
  max的默认值为32768,min的默认值为0。
  l Value属性
设置或返回当前滚动条滑块在滚动条中的位置值。要注意,在设置Value属性时,min=value=max ,缺省值为0。
  l LargeChange属性
设定在用户单击滚动条空白区时递增或递减的value属性改变值。默认值为1。
  l SmallChange属性
设定在用户单击滚动条箭头时递增或递减的value改变值。默认值为1。.6.2 基本事件
滚动条的支持事件有Change、GotFocus、LostFocus、KeyDown、KeyDress、KeyUp和Scroll 。
  Change事件是当滚动条中滑块位置发生变化,即value值发生变化时所引发的事件。
  Scroll事件是指拖动滑块所引发的事件。.6.3 举例:
例1:设计一个简易调色板。
  见教材P.73.
例2:设计一个程序:已知初速度、加速度、时间,求距离及末速度。
  见教材P.74.
说明: RGB函数是最简单的指定颜色值的方法,它将红色、蓝色和绿色每种颜色的亮度分为256个等级,由0~255来表示,将不同亮度值的三种颜色调和,形成一种新的颜色,其格式为: 对象名.属性名=RGB(红色亮度值,绿色亮度值,蓝色亮度值)
上式中,属性名可以是Backcolor、Forecolor、Fillcolor、Bordorcolor等任一属性。.7 单选按钮和复选按钮、 什么是单选按钮、复选按钮?用户使用时的功能?、 什么是一组单选按钮?
  一个容器里的按钮为一组,窗体、框架、图片框都可作容器。见教材P.77. 图4-8。、 基本属性(两类按钮的属性意义相近,一起说明)
l Alignment属性
设置标题的位置,有两个值(默认值)——标题在按钮的右边——标题在按钮的左边

l Caption属性
设置标题的文本内容。
  l Value属性
设置按钮在运行时的状态。 按钮未选中
(1)对于复选按钮,此属性有三个值: 按钮被选中 按钮被选中,且不能再修改
(2)对于单选按钮,此属性有两个值 True :被选中
False(默认值)
一组单选按钮中,最多只有一个按钮的value值为True 。.8 框架(Frame)
框架的作用是将同一类对象分组(例如有多个单选按钮)。
  [注意]:在设计框架及其内部的控件时,要正确地将控件放入框架内,让框架和控件形成一体,以便移动框架时,其上的控件也能一起移动。正确的设计方法是:
(1) 绘制框架(单击方法或双击方法都可)
(2) 在框架上放置控件,此时只能使用单击方法来绘制及放置控件。.8.1 基本属性
l Caption属性
设置框架的标题,使用户明白框架内控件的用途。
  l Enable属性
该属性有两个值: True(默认值)
False :框架内控件模糊,不会对事件响应。.8.2 基本事件
Click和DblClick ,用法如前。.8.3 举例:见教材P.78. 一个例子(框架及单选按钮的用法)。.9 计时器(Timer)
Visual Basic提供了一个计时器控件,此控件提供一个时间间隔属性,每隔一个时间间隔,就会引发计时器事件。
  Timer控件在设计时放入窗体的大小是固定的,运行时,它是不可见的。.9.1 常用属性和事件
l Enable属性
该属性确定计时器能否对Timer事件作出响应。
  有两个值:True和False ,其中True为缺省值,表示允许计时器对Timer事件响应,即有效。
  l Interval属性
时间间隔属性,取值范围为1~65535,单位为毫秒。缺省值为0,此时相当于Timer计时器无效。
  此属性可在设计状态或运行时来设置。
  此属性用来设置经过多少时间间隔对Timer事件调用一次。
  l Timer事件
此事件在计时器有效时的每一个Interval属性值的时间间隔之后发生。其格式为:
Private sub Timer1_Timer( )
……
End sub.9.2 举例:
例1:设计一个可关闭的计时器。
  见教材P.81. 起。
  例2:设计一个程序,……
见教材P.83. 起。
  本节思考题:
思考题1:利用循环实现文字的动态移动。
  思考题2:利用Timer控件实现文字的动态移动。
  思考题3:利用Timer控件使文字在窗体内来回振荡,碰到窗体边缘即改变方向运动。.10 列表框(ListBox)
列表框将选项列于框中;用户可用鼠标在上面选取一个或多个选项;若选项较多时,VB会自动给列表框加上垂直滚动条或水平滚动条;但列表框中的选项只能在设计时事先给出或在运行时通过代码来增减选项,不能由用户通过鼠标来任意增减选项。.10.1 常用方法
先介绍两个重要数组:List数组和Select数组。
  List数组中存放各列表项正文的内容,数组下标从0开始,即List(0)为第1个元素,依次类推。
  Select数组元素与List的数组元素一一对应,Select数组元素是Boolean型的,例如:List(1)放的是第2个列表项的内容,而Select(1)存放的是此列表项是否被选中的信息,True表示被选中,False表示未被选中。
  l AddItem方法
[注意]:在设计时,可以使用List属性在列表中增加或删除项目;
  在运行时,可以使用AddItem方法向列表框中添加项目,使用RemoveItem方法删除项目,使用Clear方法清除列表框中的所有项目。
  使用AddItem方法的格式为:
对象名.AddItem “列表项内容”[,Index]
  上式中,对象名可以是列表框的Name属性,也可是组合框的Name属性。
  新增的列表项放置于数组的什么位置,由Index参数决定,为0时,新增列表项置于数组第1个元素;Index参数缺省时,新增列表次置于数组的最后。
  l RemoveItem方法
用于删除列表框中某指定列表项(即删除List数组中的指定元素),其格式为:
对象名.RemoveItem Index
上式中,Index为列表项的索引值,例如:
RemoveItem ‘删除List(3)元素
l Clear方法
清除列表框中的所有列表项(即清除List数组中的所有元素)。.10.2 常见属性
l List属性
List即为字符串数组,下标由0开始,可利用List属性为列表框增加或删除列表项。
  l Columns属性
指定列表中的列数,0为缺省值,表示单列表示;若为非0的正值n,则多列显示。
  l ListCount属性
返回列表框中项目的个数。
  l ListIndex属性
返回或设置当前所选项目的索引值,若未选中任何1项,则ListIndex= -1,List(-1)返回一个空字符。
  该属性在设计状态时不可用。
  如果是多重选择,则ListIndex返回用户最后单击的列表项的索引值。
  ☆ 如何引用列表中的项目?应使用如下语法:
列表框名.List(Index)
上式中,Index是项目的索引值。
  ☆ 如何引用列表中选定的项目?应使用如下语法:
列表框名.List(列表框名.ListIndex )
l Multiselec属性
用来控制是否可以多重选取列表项。
  有三个值:0,1,2,为默认值,表示不能多重选取。——表示简单多重选择——表示扩展的多重选择:即可使用[Shift]和[ctrl]键。
  l SelCount属性
返回被选中项目的数量。
  l Selected属性
该属性即前述的select数组,它返回或设置一个项目是否被选中,该属性在设计时不可用。
  引用时:列表框名.selected(Index)
Index的取值范围:0~ListCount-1
l Sorted属性
决定列表项是否按字母顺序自动排序。
  有两个值:True和False 。False为缺省值,表示“否”。
  l Style属性
该属性描述了列表框的状态,有两个值0和1。(vbListBoxstandard):缺省值,标准样式(图5-1,教版本)。(vbListBoxCheckbox):每一个列表项前都有一个复选框(新版本)。
  l Text属性
存放用户当前选定的或最后单击的列表项内容。
  [注意]:“列表框名.Text”与“列表框名.List(列表框名.ListIndex )”的意义相同。
  l ItemData属性
该属性是一个长整型数的数组,其数组元素的个数与相应的List数组的元素数目相同,此数组用来标识List数组的各个列表项。常用作列表框控件中项目数组的索引。
  [注意]:用AddItem方法在列表中增加一个项目时,ItemData数组中也会自动插入一项,其缺省值为其对应项目的值。
  l NewIndex属性
返回最近加入到列表中的选项的索引值,该属性运行时才有效。此属性在使用自动按字母排序列表中非常有用。
  例如:要将列表框List1中新加入的项目变为当前选项,可用下行语句:
List1.ListIndex=List1.NewIndex.10.3 举例:
例:设计一个程序,界面如图5-2所示……
见教材P.90..11 组合框(ComboBox)
组合框实际上可看作是列表和文本框的组合,它有三种形态(由Style属性决定):下拉式组合框、简单组合框和下拉式列表框。见图5-3(P.94.)
☆ 组合框和列表框的异同:、 相同点:都是通过AddItem添加列表项,用RemoveItem和Clear清除列表项,都是通过List数组存放列表项。还有很多属性的功能相同。、 不同点:(1)组合框内一次只能选取一个列表项;而列表框可以选取多个列表项。
  (2)列表框不可在框内输入数据;而组合框可以直接在组合框内输入数据,不一定要在框内选取列表项。.11.1 基本属性
l Style属性(默认值):下拉式组合框
确定组合框的形态,有三个值::简单组合框:下拉式列表框
三者的特点和区别如表5-2所示:(P.94.)
表5-2 三类组合框比较表



说明


下拉式组合框


简单组合框


下拉式列表框



Style值
直接在文本框中输入
列表一直显示
引发click事件过程
引发Dblclick事件过程
引发change事件过程

隐藏

不能


显示



不可
隐藏

不能
不能


l Text属性
设置或返回编辑域(文本框)中的文本内容。
  对于下拉式组合框、简单组合框,Text属性在设计时可以输入信息,作为运行时的初始值显示;而下拉列表框的Text属性为只读型,设计时不能输入信息,只用来在运行时显示列表中的当前选项。
  l List、ListCount和Sorted属性
功能与列表框相同。
  l ListIndex属性
用户选中的或最后单击的列表项的索引值,如果用户自行输入,无论输入的文本是否与列表项相符,ListIndex的值均为-1。
  l SelLength、Selstart和SelText属性
此三个属性的用法与文本框相同。.12.2 常用的事件过程
Change事件过程:
当在组合框的文本框上输入数据时,就会引发该事件过程。.12.3 常用的方法
AddItem方法
RemoveItem方法
Clear方法
上述方法均与列表框的使用方法相同。.12.4 举例:
例:设计一个程序,……
见教材P.95..13 菜单
菜单也是一种控件,菜单分为两类:主菜单和快捷菜单。
  l 主菜单——窗体标题栏下方的菜单。
  l 快捷菜单——按鼠标右键显示的菜单。.13.1 菜单的设计
菜单的设计主要是利用菜单编辑器来实现,打开“菜单编辑器”的方法是:
→“工具”菜单/“菜单编辑器”命令→弹出“菜单编辑器”窗口
回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-4-29 03:06 , Processed in 0.247381 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表