03
2012
04

控件的使用--鼠标、键盘事件

Visual Basic应用程序能够响应鼠标和键盘事件。鼠标的Click、DblClick等事件我们已经在前面有所涉及,在本节中我们要着重介绍鼠标的MouseDown、MouseUp和MouseMove事件和键盘的KeyPress、KeyDown和KeyUp事件。这几类鼠标和键盘的事件在编程中应用非常广泛。
8.7.1 鼠标事件
所谓鼠标事件是由用户操作鼠标而引发的能被Visual Basic中各种对象识别的事件。除了Click和DblClick之外,鼠标还有以下三个事件:
MouseDown事件:当鼠标的任意一个按钮按下时被触发。
MouseUp事件:当鼠标的任意一个按钮释放时被触发。
MouseMove事件:当鼠标移动时被触发。
鼠标事件发生的先后顺序依次是: MouseDown、MouseMove和MouseUp。
这三个事件过程的使用格式如下:
Private Sub Object_MouseMove(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
Private Sub Object_MouseDown(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
Private Sub Object_MouseUp(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
其中:
Object:窗体对象或大多数可视控件。
Button:整数类型,表示鼠标的哪一个键按下或放开。鼠标键状态与Button值的对应关系如下:Button=1,表示左键按下;Button=2,表示右键按下;Button=4,表示中键按下。
在鼠标事件过程中,若未指定按键Button的值,则程序运行时无论按下鼠标的哪一个键,都会执行相应的Mouse事件。
Shift:整数类型,表示鼠标事件发生时,键盘上的Shift、Ctrl和Alt键是否被按下。各键状态与Shift值的对应关系如下:Shift=1,表示Shift键按下;Shift=2,表示Ctrl键按下;Shift=4,表示Alt键按下。
X、Y:鼠标在获得焦点的控件中的相对坐标。
Button和Shift都可以重复选择。例如,同时按下鼠标左右两键,则Button的值为3;同时按下Ctrl和Alt键,则Shift值为6。
注意:当鼠标指针位于窗体中没有控件的区域时,窗体将识别鼠标事件。当鼠标指针位于某个控件上方时,该控件识别鼠标事件。
例8.14 鼠标器事件示例。当鼠标器按下左键移动时出现“你移动了鼠标!请按住,有惊喜发现!”,当鼠标器右键按下时出现“真想有吗?那就请放开手!”,当松开鼠标器右键时出现“努力学习呀!!!”,运行界面如图8.23所示。

图8.23 鼠标事件
1)界面设计:在窗体上分别放置一个文本框和三个标签框,将文本框的Text属性和标签框的Caption属性都设置为空。
3) 程序代码如下:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single) '按住左键移动
If Button = 1 Then
Label1 = "你移动了鼠标!请按住,有惊喜发现!"
End If
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single) '按下右键
If Button = 2 Then
Label2 = "真想有吗?那请放手!"
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single) '释放右键
If Button = 2 Then
Label3 = "努力学习呀!!!"
End If
End Sub
注意:上述的三个事件均为窗体事件,因此一定要在窗体上(避开标签)操作鼠标,相应的MouseMOve、MouseDown、MouseUp事件才会发生。
例8.15 编写如下的事件过程:
Private Sub Form_Click()
Print "A";
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Print "B";
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Print "C";
End Sub
试请分析单击窗体后,窗体上显示的内容。
分析:用鼠标单击窗体时,依次引发MouseDown、MouseUp和Click事件,即Click事件包括在鼠标按下和松开的一个组合过程中。因此程序运行结果为BCA。而且由于未指定按键Button的值,按下鼠标的任意键都会出现同样的结果。
8.7.2 键盘事件
1.KeyPress事件
并不是按下键盘上任意一个键都会引发KeyPress事件,该事件只对会产生ASCII码的按键有反应。能产生ASCII码的按键包括数字、大小写字母、Enter、 Backspace、Esc、Tab等键。方向键(↑、↓、→、←)是不会产生ASCII码的按键。因此,在这些按键上不会引发KeyPress事件。
KeyPress事件过程使用格式如下:
Sub Object_KeyPress([Index As Integer, KeyAscii As Integer]
其中:
Index——返回控件数组的索引号, 对普通控件没有此属性。
KeyAscII——返回与按键相对应的AscII码值。
上述事件过程接收到的是用户通过键盘输入的AscII码数值。例如,当键盘处于小写状态,用户在键盘按“A”键,则KeyAscII参数值为97;当键盘处于大写状态,用户在键盘按“A”键,则KeyAscII参数值为65。
例8.16 要求完成一个加法器的编程。在前面两个文本框中输入数据后,单击“=”按钮,求和结果显示在第三个文本框。单击“清空”按钮,三个文本框中的内容全部清空。要求:三个文本框的对齐方式都为右对齐,前两个文本框中只允许输入数字和小数点。
1)界面设计,如图8.24所示,在窗体上分别放置3个文本框、两个命令按钮、1个标签框和1个Line控件。各控件的属性设置如表8-11所示。
表8-11 属性设置表
对象 属性 设计时属性值 说明
Text1 Text 空 设置为空
Alignment 1 右对齐
Text2 Text 空 设置为空
Alignment 1 右对齐
Text3 Text 空 设置为空
Alignment 1 右对齐
Line1 拖动Line控件在窗体中画出一条直线
Label1 Caption +
Command1 Caption =
Command2 Caption 清空

图8.24 程序界面
2)程序代码如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
' Text1中只允许输入数字和小数点
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 46 Then
KeyAscii = 0
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
' Text2中只允许输入数字和小数点
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 46 Then
KeyAscii = 0
End If
End Sub
Private Sub Command1_Click()
Text3.Text = Val(Text1.Text) + Val(Text2.Text) ' 转换成数字后两数相加
End Sub
Private Sub Command2_Click() ' 清空
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
读者可以思考一下Command1单击事件中,为什么两数相加前面要加上Val函数。
2.KeyUp和KeyDown事件
当控制焦点在某个对象上,用户按下键盘上的任一键,便会引发该对象的KeyDown事件,释放按键便触发KeyUp事件。
KeyUp和KeyDown的事件过程使用格式如下:
Private Sub Object_KeyDown(KeyCode As Integer, Shift As Integer)
Private Sub Object_KeyUp(KeyCode As Integer, Shift As Integer)
其中:
 KeyCode参数值是用户所操按键的扫描代码,它告诉事件过程用户操作了哪一个物理键。例如,不管键盘处于小写状态还是大写状态,用户按“A”键,KeyCode参数值相同。对于有上档字符和下档字符的键,其KeyCode也是相同的,为下档字符的ASCII码。
 Shift参数值返回一个整型数,与鼠标事件过程中的Shift参数意义相同。
即:Shift──表示鼠标事件发生时,键盘上的Shift、Ctrl和Alt键是否被按下。各键状态与Shift值的对应关系如下:Shift=1,表示Shift键按下;Shift=2,表示Ctrl键按下;Shift=4,表示Alt键按下。
表8.12 部分键(字符)的KeyCode和KeyAscii
键(字符) KeyCode KeyAscii
“A” 65 65
“a” 65 97
“!” 49 33
“1”(大键盘上) 49 49
“1”(数字键盘上) 97 49
Home键 36 无
F10键 121 无
 实际应用中,这两个事件主要是用于测试接受的功能键。

例8.17 当按下F10显示照片,当放手时关闭显示。
1)拖动Image影像框控件在窗体上画出一个影像框。
表8-13 属性设置
对象 属性 设计时属性值 说明
Form1 KeyPreview True 窗体可以响应键盘事件
Image1 Visible False
Image1 Picture 点击Picture属性,为Image控件加载一图片
2)代码如下:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 121 Then '按下F10键
Image1.Visible = True
End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 121 Then '
Image1.Visible = False
End If
End Sub
3)程序运行时,按下F10键出现影像框控件;释放F10键,影像框控件消失。
« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。