Visual Basic 键盘事件

键盘是另一个输入数据或信息的重要工具。Visual Basic提供了三种事件处理键盘行为,即KeyPress,KeyDown和KeyUp事件,而且窗体和接受键盘输入的控件都可识别这三种事件。

1.KeyPress事件

KeyPress事件是当键盘有按键发生触发时。KeyPress事件检测有Enter,Tab,BackSpace以及键盘上的字母、数字和标点符号键,对于其他功能键、编辑键和定位键,则不作响应。其语法格式为:

Private Sub 对象_KeyPress(KeyAscii As Integer)

KeyAscii参数是按键对应的ASCII码值。例如,在一个空白窗体的Form_KeyPress事件过程中,输入显示此参数的命令:

Print KeyAscii

运行程序后,如果在键盘上按下"a"字符,窗体将会显示出数字97,也就是KeyPress事件会在用户按下"a"字符时返回其字符码97。不过这些字符码通常不是我们需要的,利用Chr函数就可将字符码转换为该字符了,对于上行程序代码可改为:

Print Chr(KeyAscii)

KeyPress事件过程在截取TextBox或ComboBox控件所输入的击键时,可立即测试击键的有效性,也可用于识别键盘是否按键,或是否按下某些特定键(如回车键)。例如在给文本框输入数据时,要求只能输入0~9数字的程序代码为:

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii < 48 Or KeyAscii > 57 Then

KeyAscii = 0

Text1.SetFocus

End If

End Sub

数字0~9的ASCII值位于48~57之间。当按下的不是有效的数字时,KeyPress事件可使其在文本框中不显示,这样就不需要在文本框的LostFocus事件中判断输入的合法性了。

2.KeyDown和KeyUp事件

KeyDown事件是当按下按键时触发,KeyUp事件是当释放按键时触发,这两个事件提供了最低级的键盘响应,可以报告键盘的物理状态。语法格式如下:

Private Sub 对象_KeyDown(KeyCode As Integer, Shift As Integer)

Private Sub 对象_KeyUp(KeyCode As Integer, Shift As Integer)

其中,KeyCode是所按键的ASCII码值,Shift表示Shift,Ctrl,Alt键的按下状态。

KeyDown和KeyUp事件除了可识别KeyPress事件可识别的键,还可识别键盘上的大多数键,如功能键、编辑键、定位键和数字小键盘上的键。虽然键盘上的数字键与小键盘上的数字键的字符相同,但其ASCII码值是不同的。如表8.7所示,列出了一些常用的按键与KeyCode、常数的对应关系。

表8.7 一些常用KeyCode值

|-----------|----------|-----------|----------|----------|---------------|
| 功能键 | KeyCode值 | 常 数 | 功能键 | KeyCode值 | 常 数 |
| F1 | 112 | vbKeyF1 | Enter | 13 | vbKeyReturn |
| F2 | 113 | vbKeyF2 | Esc | 27 | vbKeyEscape |
| F3 | 114 | vbKeyF3 | PageUp | 33 | vbKeyPageUp |
| F4 | 115 | vbKeyF4 | PageDown | 34 | vbKeyPageDown |
| F5 | 116 | vbKeyF5 | Home | 35 | vbKeyHome |
| F6 | 117 | vbKeyF6 | End | 36 | vbKeyEnd |
| F7 | 118 | vbKeyF7 | Insert | 45 | vbKeyInsert |
| F8 | 119 | vbKeyF8 | Delete | 46 | vbKeyDelete |
| F9 | 120 | vbKeyF9 | ← | 37 | vbKeyLeft |
| F10 | 121 | vbKeyF10 | ↑ | 38 | vbKeyUp |
| Backspace | 8 | vbKeyBack | → | 39 | vbKeyRight |
| Tab | 9 | vbKeyTab | ↓ | 40 | vbKeyDown |

KeyDown和KdyUp事件报告键盘本身准确的物理状态,而KeyPress事件只提供键所代表的字符而不识别键的按下或松开状态。例如在输入大写字母"A"时,KeyDown事件获得"A"的ASCII码,输入小写"a"时,KeyDown事件获得相同的ASCII码。为了区分大小写,这些事件使用Shift参数。与此相对照的是,KeyPress事件将字母的大小写作为两个不同的ASCII字符处理。

键盘事件彼此之间并不互相排斥,当按下某个键时,将产生KeyPress和KeyDown事件。如果是KeyPress事件不能检测的键,那么仅触发KeyDown事件。虽然KeyDown和KeyUp事件可应用于大多数键,它们最经常应用的还是扩展的字符键、定位键、修饰键和按键的组合,区别数字小键盘和常规数字键。例如,要想在程序运行时,通过Ctrl+End组合键结束程序,可用下列代码实现:

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

If KeyCode = 35 And Shift = 2 Then End

End Sub

每个KeyDown和KeyUp事件都附加在特定的对象上。为了编写应用于窗体上所有对象的键盘处理器,应将窗体的KeyPreview属性设置为True。将KeyPreview属性设置为True时,对所有控件,在控件识别KeyPress,KeyDown和KeyUp事件之前,窗体会识别控件的这些事件。

例如,可以在窗体上添加两个控件Text1和Command1,并把窗体的KeyPreview属性改为True。先在窗体声明部分加入:

Dim ShiftKey As Integer

然后在Form_KeyDown事件中编写如下代码:

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

ShiftKey = Shift And 7

Select Case ShiftKey

Case 1

Print "You pressed the Shift Key."

Case 2

Print "You pressed the Ctrl Key."

Case 4

Print "You pressed the Alt Key."

End Select

End Sub

在运行程序时,无论哪个控件获得焦点,按下每个键都会在窗体上显示相应的信息。

如果已为菜单控件定义了快捷键,那么,当按下该键时会自动触发菜单控件的Click事件,而不是键盘事件。同样,如果在窗体上有一个命令按钮,其Default属性被设置为True,则Enter键将触发此命令按钮的Click事件而不是键盘事件。如果将命令按钮的Cancel属性设置为True,则按Esc键将触发按钮的Click事件而不是键盘事件。

相关推荐
醉风塘21 小时前
Python基础语法完全指南:从零入门到掌握核心概念
开发语言·python
攻城狮7号21 小时前
【AI时代速通QT】第十节:在 Windows 上配置vs和qmake环境手动编译 Qt 项目
windows·qt·makefile·visual studio·qmake·vcvarsall·nmake/jom
渔舟唱晚@21 小时前
从原理到实现:基于 Y.js 和 Tiptap 的实时在线协同编辑器全解析
开发语言·javascript·编辑器
Boop_wu21 小时前
[Java EE] 网络编程套接字
开发语言·单片机·php
亮子AI21 小时前
chart.js 雷达图顶部标题怎样消除?
开发语言·前端·javascript·chart.js
兩尛21 小时前
查找接口成功率最优时间段 (c卷)
c语言·开发语言·算法
0和1的舞者21 小时前
《Spring Bean&DI 通关笔记:从定义到注入的全场景避坑指南》
java·开发语言·学习·spring·ioc·di·web
tryxr21 小时前
synchronized
java·开发语言·锁机制·锁升级·synchronized 锁
_OP_CHEN21 小时前
【从零开始的Qt开发指南】(八)Qt 常用控件之显示类控件(上):Label 与 LCD Number 实战指南
开发语言·c++·qt·前端开发·图形化界面·qt常用控件·企业级组件