在按下与 ASCII 字符对应的键时将触发 KeyPress 事件。ASCII 字符集不仅代表标准键盘的字母、数字和标点符号,而且也代表大多数控制键。但是 KeyPress 事件只识别 ENTER、TAB 和 BACKSPACE 键。KeyDown 和 KeyUp 事件能够检测其它功能键、编辑键和定位键。
无论何时要处理标准 ASCII 字符都应使用 KeyPress 事件。例如,如果希望将文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:
Private Sub Text1_KeyPress (KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
keyascii 参数返回对应于 ASCII 字符代码的整型数值。上述过程用 Chr 将 ASCII 字符代码转换成对应的字符,然后用 Ucase 将字符转换为大写,并用 Asc 将结果转换回字符代码。
可用相同的 ASCII 字符代码检测,是否可通过按下 KeyPress 事件识别一个键。例如,下述事件过程使用 KeyPress 检测用户是否正在按 BACKSPACE 键:
Private Sub Text1_KeyPress (KeyAscii As Integer)
If KeyAscii = 8 Then MsgBox "You pressed the _
BACKSPACE key."
End Sub
也可用 Visual Basic 的键代码常数代替字符代码。示例中的 BACKSPACE 键的 ASCII 值为 8,其常数值为 vbKeyBack。
详细信息 关于字符代码的完整列表,请参阅“语言参考”的的“字符集 (0–127)”和“字符集 (128–255)”。“键代码常数”提供了键代码常数与对应的 ASCII 值的完整列表,也可通过“对象浏览器”并搜索 KeyCodeConstants 获得此列表。
还可用 KeyPress 事件改变某些键的缺省行为。例如,当窗体上没有缺省按钮时,按 ENTER 键就会发出嘟嘟声。在 KeyPress 事件中截断 ENTER 键(字符代码 13)就可避免发声。
Private Sub Text1_KeyPress (KeyAscii As Integer)
If KeyAscii = 13 Then KeyAscii = 0
End Sub