news 2026/2/12 6:32:21

VB 键盘事件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VB 键盘事件

键盘是另一个输入数据或信息的重要工具。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事件而不是键盘事件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 3:35:38

终极免费开源电子书阅读器:Bookworm 完整指南

终极免费开源电子书阅读器&#xff1a;Bookworm 完整指南 【免费下载链接】bookworm A simple ebook reader for Elementary OS 项目地址: https://gitcode.com/gh_mirrors/bo/bookworm 在数字阅读时代&#xff0c;找到一款真正好用且支持多格式的电子书阅读器至关重要。…

作者头像 李华
网站建设 2026/2/8 10:36:39

揭秘Kimi-VL多模态AI:智能思考技术全面解析

揭秘Kimi-VL多模态AI&#xff1a;智能思考技术全面解析 【免费下载链接】Kimi-VL-A3B-Thinking-2506 这是 Kimi-VL-A3B-Thinking 的更新版本&#xff0c;具备以下增强能力&#xff1a; 思考更智能&#xff0c;消耗更少 Token&#xff1a;2506 版本在多模态推理基准测试中达到更…

作者头像 李华
网站建设 2026/2/6 0:51:26

如何快速搭建个人云存储网盘:ZPan完整使用指南

ZPan是一个基于云存储的自托管网盘系统&#xff0c;它让你能够轻松搭建私人或企业级云盘&#xff0c;摆脱传统服务器带宽限制。这个开源项目采用Go语言开发&#xff0c;性能高效稳定&#xff0c;支持多种云存储服务商&#xff0c;是构建私有云存储的理想选择。 【免费下载链接】…

作者头像 李华
网站建设 2026/2/6 23:46:44

如何写出优秀的单元测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快写出优秀的单元测试需要考虑以下几个方面&#xff1a;1. 测试用例设计测试用例应该覆盖被测试代码的不同场景和边界情况&#xff0c;以尽可能发现潜在的问题。在设计…

作者头像 李华
网站建设 2026/2/11 6:16:43

LLM - 从 Prompt 到上下文工程:面向 Java 的生产级 AI Agent 设计范式

文章目录引言&#xff1a;从“会写代码”到“能托付工作”Agent 能力边界与安全前提Prompt 注入威胁的现实形态多层防注入策略&#xff1a;从模型到框架工具设计&#xff1a;从“能用”到“好用又安全”工具调用策略&#xff1a;循环而非流水线上下文工程&#xff1a;从 Prompt…

作者头像 李华
网站建设 2026/2/9 0:57:12

完结 风哥Oracle RAC+DG生产实战(4):Oracle21c RAC DataGuard搭建2+2

如何高效掌握《Oracle 21c RAC DataGuard 22架构实战指南》并生成技术文章想要快速且有效地消化这篇架构实战指南&#xff0c;并将其精髓转化为一篇属于自己的技术文章&#xff0c;可以遵循以下系统化的学习与写作路径。这不仅适用于本文&#xff0c;也是学习任何复杂技术文档的…

作者头像 李华