例2如果一个直线控件在窗体上呈现为一条垂直线,则可以确定的是:
(11年3月真题)
A)它的Y1、Y2属性的值相等
B)它的X1、X2属性的值相等
C)它的X1、Y1属性的值分别与X2、Y2属性的值相等
D)它的X1、X2属性的值分别与Y1、Y2属性的值相等
例3窗体上有一个名称为Shape1的形状控件和由三个命令按钮组成的名称cmdDraw的控件数组。
窗体外观如图所示(从上到下的3个命令按钮下标分别为0、1、2)。
有事件过程如下:
(12年9月真题)
PrivateSubcmdDraw_Click(IndexAsInteger)
SelectCaseIndex
Case0
Shape1.shape=0
Case1
Shape1.shape=1
Case2
Shape1.Shape=3
EndSelect
EndSub
当单击“画圆”命令按钮时,会执行cmdDraw_Click事件过程。
以下叙述中正确的是
A、Case2分支有错,此Case后面表达式的值应该与赋给Shape1.Shape的值一致
B、程序运行有错,控件数级别的下标应该从1开始
C、Index是形状控件的参数
D、程序正常运行,形状控件被显示为圆形
六、Tab顺序
Tab顺序是在按Tab键时焦点在控件间移动的顺序。
当窗体上有多个控件时,每按一次Tab键,可以使焦点从一个控件移动到另一个控件。
在设计阶段可以通过属性窗口中的TabIndex属性来改变对象的Tab属性。
七、可选参数和可变参数
VB在调用一个过程时允许使用可选参数和可变参数向过程传送可选的参数或者任意数量的参数。
1.可选参数
在调用一个过程时,并不是每次都要传递所有的参数。
有些参数是为了提供某项功能,但这项功能不是每次调用该过程时都需要的。
为了定义可选参数,需要在参数表中使用Optional关键字来指定可选参数。
使用可选参数时还应该注意两点要求:
如果某个参数被指定为可选参数,那么它后面的参数必须都是可选的;可选参数必须是Variant类型。
2.可变参数
可变参数过程通过ParamArray关键字来定义。
在使用可变参数时应注意四个规则:
ParamArray只能用于参数列表中的最后一个参数;ParamArray声明的参数数组只能是Variant类型;ParamArray不能和ByVal关键字、ByRef关键字以及Optional关键字一起使用;ParamArray声明的参数数值,无论是否使用OptionBase1语句,它的下界总是0。
八、窗体参数和控件参数
1.窗体参数
【格式】Sub过程名(形式参数表)
语句块
[ExitSub]
……
EndSub
用窗体作为通用过程的参数。
“形式参数表”中的形参的类型通常为Form。
2.控件参数
在VB中不仅可以使用窗体作为通用过程的参数,还可以使用控件作为通用过程参数。
控件参数用法同窗体参数,不过形参类型一般为Control。
应用:
在调用含有对象的过程时,对象只能通过传地址方式传送,故此不能再其参数前加关键字ByVal。
3.Shell函数
其格式为:
Shell(命令字符串[,窗口类型])。
Shell语句用于运行一个可执行文件(COM、EXE文件)。
如果成功,将返回一个代表这个程序的任务ID;若不成功,则会返回0。
“命令字符串”是要执行的应用程序的名称(包括路径),但它必须是可执行文件;“窗口类型”是调用应用程序时程序运行窗口的大小。
应用:
注意Shell函数与语句的区别。
九、多重窗体
多重窗体是指在一个工程中同时存放有多个并列的普通窗体,每个普通窗体都有自己的设计界面和相对应的程序代码,它们各自执行着自己的功能。
例1以下描述中错误的是:
(11年9月真题)
A)在多窗体应用程序中,可以有多个当前窗体
B)多窗体应用程序的启动窗体可以在设计时设定
C)多窗体应用程序中每个窗体作为一个磁盘文件保存
D)多窗体应用程序可以编译生成一个EXE文件
例2以下关于多窗体的叙述中,正确的是:
(12年3月真题)
A)任何时刻,只有一个当前窗体
B)向一个工程添加多个窗体,存盘后生成一个窗体文件
C)打开一个窗体时,其他窗体自动关闭
D)只有第一个建立的窗体才是启动窗体
十、键盘事件
常见的键盘事件有:
KeyDown、KeyPress和KeyUp。
当用户按下并释放一个可打印的键盘字符时,KeyDown、KeyPress、KeyUp事件将依次发生。
例1VB中有3个键盘事件:
KeyPress、KeyDown、KeyUp,若光标在Text1文本框中,则每输入一个字母:
(10年3月真题)
A)这3个事件都会触发B)只触发KeyPress事件
C)只触发KeyDown、KeyUp事件D)不触发其中任何一个事件
例2以下说法中正确是的:
(09年3月真题)
A)当焦点在某个控件上时,按下一个字母键,就会执行该控件的keypress事件过程
B)因为窗体不接受焦点,所以窗体不存在自己的keypress事件过程
C)若按下的键相同,keypress事件过程中的keyascii参数与keydown事件过程中的keycode参数的值也相同
D)在keypress事件过程中,keyascii参数可以省略
1.KeyPress事件
【格式】PrivateSub控件名_KeyPress(KeyAsciiAsInteger)
……
EndSub
KeyAscii参数是所按键的ASCII码值,该参数传递一个字符,并且把字符的大、小写形式作为两种不同的字符。
定义KeyPress事件过程的操作过程为:
首先在窗体上面一个控件(这里指可以发生KeyPress事件的控件,如文本框等);然后双击该控件,进入程序代码窗口后;在“过程”框中选取KeyPress事件,在其中编写程序代码即可。
例3在窗体上画一个命令按钮和一个文本框(名称分别为Command1和Text1),并把窗体的Keyprewiew属性设置为True,然后编写如下代码:
(09年3月真题)
DimSaveAllAsString
PrivateSubForm_Load()
Show
Text1.Text=””
Text1.SetFocus
EndSub
PrivateSubCommand1_Click()
Text1.Text=Lcase(SaveAll)+SaveAll
EndSub
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
SaveAll=SaveAll+Chr(KeyAscii)
EndSub
程序运行后,直接用键盘输入:
VB,再单击命令按钮,则文本框中显示的内容为
A)vbVBB)不显示任何信息C)VBD)出错
例4在窗体上画1个命令按钮和1个文本框,其名称分别为Command1和Text1,再编写如下程序:
(09年9月真题)
DimssAsString
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfChr(KeyAscii)<>""Thenss=ss+Chr(KeyAscii)
EndSub
PrivateSubCommand1_Click()
DimmAsString,iAsInteger
Fori=Len(ss)To1Step-1
m=m+Mid(ss,i,1)
Next
Text1.Text=UCase(m)
EndSub
程序运行后,在文本框中输入“Number100”,并单击命令按钮,则文本框中显示的是
A)NUMBER100B)REBMUNC)REBMUN100D)001REBMUN
2.KeyDown事件和KeyUp事件
【格式】PrivateSub控件名_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
……
EndSub
【格式】PrivateSub控件名_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
……
EndSub
KeyCode参数是表示所按键的位置信息的代码(不是ASCII码,而是每个键的代码),Shift参数代表按键时Shift键、Ctrl键和Alt键的状态。
应用:
注意参数KeyAscii和KeyCode的区别。
例5在窗体上画一个命令按钮和两个文本框,其名称分别为Command1、TextI和Text2,在属性窗口中把窗体的KeyPreview属性设置为True,然后编写如下程序:
(10年9月真题)
DimSIAsString,S2AsString
PrivateSubFormLoad()
Text1.Text=""
Text2.Text=""
Text1.Enabled=False
Text2.Enabled=False
EndSub
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
S2=S2&Chr(KeyCode)
EndSub
PrivateSubForin_KeyPress(KeyAsciiAsInteger)
S1=S1&Chr(KeyAscii)
EndSub
PrivateSubCommandlClick
Textl.Text=Sl
Text2.Text=S2
S1=""
S2=""
EndSub
程序运行后,先后按“a”、“b”、“c”键,然后单击命令按钮,在文本框Textl和Text2中显示的内容分别为
A)abc和ABCB)空白C)ABC和abcD)出错
十一、鼠标事件
1.鼠标状态事件
鼠标事件分为点击事件和状态事件。
点击事件又分为单击事件和双击事件,这两个事件不区分左键和右键;状态事件又分为按下事件(MouseDown)、移动事件(MouseMove)和弹起事件(MouseUp),这三个事件能够区分出鼠标的左键、右键和中间键。
(1)按下鼠标事件过程
格式:
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSinglie,YAsSingle)
……
EndSub
例1若看到程序有如下事件过程,则可以肯定的是,当程序运行时(09年9月真题)
PrivateSubClick_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Print"VBProgram"
EndSub
A)用鼠标左键单击名称为“Command1”的命令按钮,执行此过程
B)用鼠标左键单击名称为“MouseDown”的命令按钮,执行此过程
C)用鼠标右键单击名称为“MouseDown”的命令按钮,执行此过程
D)用鼠标左键或右键单击名称为“Click”的命令按钮,执行此过程
例2设窗体的名称为Form1,标题为Win,则窗体的MouseDown事件过程的过程名是
(10年3月真题)
A)Form1_MouseDown
B)Win_MouseDown
C)Form_MouseDown
D)MouseDown_Form1
例3以下说法中正确的是:
(11年9月真题)
A)MouseUp事件是鼠标向上移动时触发的事件
B)MouseUp事件过程中的x,y参数用于修改鼠标位置
C)在MouseUp事件过程中可以判断用户是否使用了组合键
D)在MouseUp事件过程中不能判断鼠标的位置
(2)松开鼠标事件过程
格式:
PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSinglie,YAsSingle)
……
EndSub
(3)移动鼠标光标事件过程
格式:
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSinglie,YAsSingle)
……
EndSub
例4要求当鼠标在图片框P1中移动时,立即在图片框中显示鼠标的位置坐标。
下面能正确实现上述功能的事件过程是:
(10年3月真题)
A)PrivateSubP1_MouseMove(ButtonASInteger,ShiftAsInteger,XAsSingle,YAsSingle)
PrintX,Y
EndSub
B)PrivateSubP1_MouseDown(ButtonASInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Picture.PrintX,Y
EndSub
C)PrivateSubP1_MouseMove(ButtonASInteger,ShiftAsInteger,XAsSingle,YAsSingle)
P1.PrintX,Y
EndSub
D)PrivateSubForm_MouseMove(ButtonASInteger,ShiftAsInteger,XAsSingle,YAsSingle)
P1.PrintX,Y
EndSub
例5假定已经在菜单编辑器中建立了窗体的弹出式菜单,其顶级菜单项的名称为a1,其“可见”属性为False。
程序运行后,单击鼠标左键或右键都能弹出菜单的事件过程是:
(11年9月真题)
A)PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=1AndButton=2Then
PopupMenua1
EndIf
EndSub
B)PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
PopupMenua1
EndSub
C)PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=1Then
PopupMenua1
EndIf
EndSub
D)PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then
PopupMenua1
EndIf
EndSub
它们适用于窗体和大多数控件,包括复选框、命令按钮、单选按钮、框架、文本框、目录框、文件框、图像框、图片框、标签、列表框等。
这三个鼠标事件过程具有相同的参数。
Button表示被按下的鼠标键,可取3个值;Shift表示Shift,Ctrl和Alt键的状态;X,Y鼠标光标的当前位置。
2.MousePointer属性
MousePointer属性用于设置鼠标经过某对象时光标的形状类型,其值可以是0~15之间的任一整数,不同的值代表不同的形状。
MousePointer属性可以在程序设计时通过属性窗口设置,也可以在程序运行阶段通过代码设置。
(1)在属性窗口中设置
单击属性窗口的MousePointer属性条,然后单击设置框右端向下的箭头,将下拉显示MousePointer的16个属性值。
(2)在代码中设置
格式为:
对象.MousePointer=设置值
(3)自定义鼠标光标
如果把MousePointer属性设置为99,则可以通过Mouselcon属性定义自己的鼠标光标。
有以下两种方法:
①在属性窗口中定义
首先选择所需要的对象,再把MousePointer属性设置为“99–Custom”,然后设置MouseIcon属性,把一个图标文件赋给该属性(与设置Picture属性的方法相同)。
②用程序代码设置
先把MousePointer属性值设置为99,然后再用LoadPicture函数把一个图标文件赋给Mouselcon属性。
(4)鼠标光标形状的使用
在Windows中,鼠标光标的应用有一些约定俗成的规则。
为了与Windows环境相适应,在应用程序中应遵守三个主要规则:
①表示用户当前可用的功能,如“I”,形鼠标光标(属性值3)表示插入文本;十字形状(属性2)表示画线或圆,或者