理论教育 VB键盘事件:KeyPress、KeyUp和KeyDown

VB键盘事件:KeyPress、KeyUp和KeyDown

时间:2023-11-19 理论教育 版权反馈
【摘要】:VB中的对象识别键盘事件,包括KeyPress、KeyUp和KeyDown事件。只有获得焦点的对象才能够接受键盘事件。键盘事件可获得当前所按键的信息。如文本框,按键后,触发其键盘事件,然后是Change事件,并显示字符。键盘事件常用于检查输入数据是否合法。通过窗体键盘事件截获输入键的ASCII码。

VB键盘事件:KeyPress、KeyUp和KeyDown

VB中的对象识别键盘事件,包括KeyPress、KeyUp和KeyDown事件。用户按下并且释放一个ANSI键时就会触发KeyPress事件;用户按下一个键时触发KeyDown事件;用户释放一个键时引发KeyUp事件。在引发键盘事件的同时,用户所按的键盘码作为实参传递给相应的事件过程,供程序判断识别用户的操作。

在Visual Basic中,提供KeyPress、KeyDown、KeyUp三种键盘事件,窗体和接受键盘输入的控件都识别这三种事件。

只有获得焦点的对象才能够接受键盘事件。键盘事件可获得当前所按键的信息。

键盘事件的先后顺序:

窗体的KeyPreview属性设置为True,则首先触发窗体的KeyPress、KeyDown和KeyUp事件,然后再触发活动控件的KeyPress,KeyDown和KeyUp事件。即如窗体键盘事件过程修改了所按键的值,则当前具有焦点的控件的KeyPress事件过程将接收到修改后的值。

在对某活动控件按键时,先触发该控件的键盘事件,然后才是其他事件。如文本框,按键后,触发其键盘事件,然后是Change事件,并显示字符。键盘事件常用于检查输入数据是否合法。如在某文本框中输入“a”,则在文本框接受字符前,键盘事件的程序可以先期截获该字符。

一、KeyPress事件

在程序运行过程中,当按下键盘某个键时,会触发当前拥有输入焦点的那个控件的KeyPress事件。

当KeyPress事件发生时,可获得当前所按键的字符ASCII码值,如:按下回车键时,可获得该键的字符ASCII码值13。

KeyPress事件可用于文本框、图片框、命令按钮复选框、列表框、组合框、滚动条、窗体等有关控件。

按下并且释放一个键时,触发KeyPress事件。在窗体上画一个控件,双击该控件,进入程序代码窗口后,从“过程”框中选取KeyPress,即可定义KeyPress事件过程。一般格式为:

Private Sub Form_KeyPress(KeyAscii As Integer) ′窗体的事件过程

Private Sub object_KeyPress(KeyAscii As Integer) ′控件的事件过程

Sub Object_KeyPress([Index As Integer,]KeyAscii As Integer)

形参KeyAscii,其参数值是当KeyPress事件发生时,由系统自动传递过来的当前所按键的ASCII码值。例如,当按下“A”键,系统传递给形参KeyAscii的值为65;而当按下“a”键时,则系统传递给KeyAscii的值为97。

KeyAscii参数有两种形式:Index As Integer只用于控件数组;KeyAscii As Integer用于单个控件。

KeyPress事件用来识别按键的ASCII码。如[Enter]键、[Tab]键、[Backspace]键以及标准键盘中的字母、标点、数字键等,其他功能键不能识别。利用KeyPress事件可以对输入的值进行验证、限制和修改。

【例11.1】通过窗体键盘事件截获输入键的ASCII码。

Private Sub Form_Load()

Form1.KeyPreview=True

End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

Print"Form1显示:";Chr(KeyAscii);" 其ASCII码=";KeyAscii

KeyAscii=KeyAscii+1′改变ASCII码值,使文本框接受的与窗体不同

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)(www.daowen.com)

Print"Text1显示:";Chr(KeyAscii);" 其ASCII码=";KeyAscii

End Sub

图11-1 例11.1运行结果

二、KeyDown事件和KeyUp事件

程序运行过程中,当按下键盘某个键时,则产生KeyDown事件;而放开该键时产生KeyUp事件。按下某个键也会发生KeyPress事件,但与KeyDown事件是不一样的。KeyDown和KeyUp事件返回的是键盘的直接状态,即该键的“扫描码”值。其格式为:

Private Sub object_KeyUp([Index As Integer,]keycode As Integer,shift As Integer)

Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)

参数KeyCode:键盘扫描码。

由于字母键不论大写还是小写都是按同一个键,所以按下每个字母键时的KeyCode值只能为一个值,如按下“A”与按下“a”得到的KeyCode值都是65。(有上下档键的字符取下档键的ASCII码值)

参数Shift:记录Shift、Ctrl、Alt三个转换键的状态。

按Shift键(001B) Shift=1

按Ctrl键(010B) Shift=2

按Alt键(100B) Shift=4

如果同时按下两个或三个转换键,则Shift参数的值即为上述两者或三者之和。

注意:

1.KeyDown和KeyUp事件的参数也有两种形式:Index As Integer只用于控件数组;KeyCode As Integer,Shift As Integer用于单个控件。

2.KeyPress不直接报告键盘的状态,只报告ASCII值;不识别按下、放开的动作;通过Keyascii返回输入字符的信息。

3.KeyDown、KeyUp区分按下与放开操作;不区分大小写;通过KeyCode和Shift返回输入键盘码的信息。

4.有时一个动作会触发若干个事件。当按下键盘上某一键时,触发了多个键盘事件。

【例11.2】设计一个口令检测程序,界面如图11-2所示,当用户输入的口令正确时,显示“恭喜!您已成功进入本系统”,否则,显示“口令错!请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后结束程序的执行。

图11-2 例11.2运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈