vb中的keyup,keypress,keydown事件的区别?

qq_39336686 2017-07-07 10:20:52
vb中的keyup,keypress,keydown事件的区别?
...全文
2286 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个.net用法一样吗?
赵4老师 2017-07-10
  • 打赏
  • 举报
回复
引用 5 楼 sysdzw 的回复:
我进来只是看看赵四老师又复制啥了
你上道了!
zdingyun 2017-07-08
  • 打赏
  • 举报
回复
KeyDown、KeyUp 事件,这些事件是当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的。(要解释 ANSI 字符,应使用 KeyPress 事件。


KeyDown、KeyUp 事件示例
本例演示一个响应 F2 以及与 ALT,SHIFT 和 CTRL 相联的组合键类属键盘处理程序。键常数列在对象浏览器中的 Visual Basic (VB) 对象库里。要尝试这个例子,可将代码粘贴到一个含 1 个 TextBox 控件的窗体的声明部分,然后按 F5 键和 ALT+F2, SHIFT+F2,和 CTRL+F2 组合键。

Private Sub Text1_KeyDown (KeyCode As Integer, Shift As Integer)
Dim ShiftDown, AltDown, CtrlDown, Txt
ShiftDown = (Shift And vbShiftMask) > 0
AltDown = (Shift And vbAltMask) > 0
CtrlDown = (Shift And vbCtrlMask) > 0
If KeyCode = vbKeyF2 Then ' 显示键组合.
If ShiftDown And CtrlDown And AltDown Then
Txt = "SHIFT+CTRL+ALT+F2."
ElseIf ShiftDown And AltDown Then
Txt = "SHIFT+ALT+F2."
ElseIf ShiftDown And CtrlDown Then
Txt = "SHIFT+CTRL+F2."
ElseIf CtrlDown And AltDown Then
Txt = "CTRL+ALT+F2."
ElseIf ShiftDown Then
Txt = "SHIFT+F2."
ElseIf CtrlDown Then
Txt = "CTRL+F2."
ElseIf AltDown Then
Txt = "ALT+F2."
ElseIf SHIFT = 0 Then
Txt = "F2."
End If
Text1.Text = "You pressed " & Txt
End If
End Sub


KeyPress 事件,此事件当用户按下和松开一个 ANSI 键时发生。

KeyPress 事件示例
本例将输入到 TextBox 控件的文本转换为大写。要尝试这个例子,可将代码粘贴到一个包含一个 TextBox 控件窗体的声明部分,然后按 F5 键并在 TextBox 中输入内容。

Private Sub Text1_KeyPress (KeyAscii As Integer)
Char = Chr(KeyAscii)
KeyAscii = Asc(UCase(Char))
End Sub








舉杯邀明月 2017-07-07
  • 打赏
  • 举报
回复
keypress事件只针对“可打印字符键”,是某个字符键已经按下、并且已经有一些“先期处理”之后触发。 keydown事件是键盘上任意键按下时触发(个别“系统级功能”键除外),  并且有一个“按键码”(虚拟键位码)标识是哪个键按下。  大部分键在按下后不放开、延时一定时间后,会持续不断的触发 keydown事件。 keyup事件,跟keydown事件类似,只是是“放开后”触发。  并且“放开”是不可能持续触发的,也就是放开一次就只能触发一次。 keydown、keyup这两个事件,只针对“键”而不是针对“字符”,比如: 1. 你在主键盘区按下数字键1,跟在右边小键盘区按下数字键1,它们的KeyCode是不相等的; 2. 单独按下字符键A,跟“先按下Shift不放、再按字符键A”,   在“字符键A按下后”产生的KeyCode,这两种情况下都是一样的。   
脆皮大雪糕 2017-07-07
  • 打赏
  • 举报
回复
窗体里放一个文本框,然后贴下面代码,然后挨个键按过去,看看立即窗口的输出差异以及显示顺序,立马就明白了


Option Explicit


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "keydown", KeyCode, Shift
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Debug.Print "keypress", KeyAscii
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "keyup", KeyCode, Shift
End Sub
无·法 2017-07-07
  • 打赏
  • 举报
回复
我进来只是看看赵四老师又复制啥了
赵4老师 2017-07-07
  • 打赏
  • 举报
回复
KeyDown、KeyUp 事件 这些事件是当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生的。(要解释 ANSI 字符,应使用 KeyPress 事件。) 语法 Private Sub Form_KeyDown(keycode As Integer, shift As Integer) Private Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer) Private Sub Form_KeyUp(keycode As Integer, shift As Integer) Private Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer) KeyDown 和 KeyUp 事件包括下列部分: 部分 描述 object 一个对象表达式,其值是“应用于”列表中的一个对象。 index 是一个整数,它用来唯一标识一个在控件数组中的控件。 keycode 是一个键代码,诸如 vbKeyF1 ( F1 键)或 vbKeyHome ( HOME 键)。要指定键代码,可使用对象浏览器中的 Visual Basic ( VB ) 对象库中的常数。 shift 是在该事件发生时响应 SHIFT ,CTRL 和 ALT 键的状态的一个整数。shift 参数是一个位域,它用最少的位响应 SHIFT 键(位 0 )、CTRL 键(位 1 )和 ALT 键(位 2 )。这些位分别对应于值 1、2 和 4。可通过对一些、所有或无位的设置来指明有一些、所有或零个键被按下。例如,如果 CTRL 和 ALT 这两个键都被按下,则 shift 的值为 6。 说明 对于这两个事件来说,带焦点的对象都接收所有击键。一个窗体只有在不具有可视的和有效的控件时才可以获得焦点。虽然 KeyDown 和 KeyUp 事件可应用于大多数键,它们最经常地还是应用于: 扩展的字符键如功能键等。 定位键。 键盘修饰键和按键的组合。 区别数字小键盘和常规数字键。 在需要对按下和松开一个键都响应时,可使用 KeyDown 和 KeyUp 事件过程。 下列情况不能引用 KeyDown 和 KeyUp 事件: 窗体有一个 CommandButton 控件,并且 Default 属性设置为 True 时的 ENTER 键。 窗体有一个 CommandButton 控件,并且 Cancel 属性设置为 True 时的 ESC 键。 TAB 键。 KeyDown 和 KeyUp 用两种参数解释每个字符的大写形式和小写形式:keycode —显示物理的键(将 A 和 a 作为同一个键返回)和 shift —显示 shift + key 键的状态而且返回 A 或 a 其中之一。 如果需要测试 shift 参数,可使用该参数中定义各位的 shift 常数。该常数有下列值: 常数 值 描述 vbShiftMask 1 SHIFT 键的位屏蔽。 VbCtrlMask 2 CTRL 键的位屏蔽。 VbAltMask 4 ALT 键的位屏蔽。 该常数用作位屏蔽。它可被用来测试任何键组合。 测试一个条件时,首先将每个结果分配给一个临时整数变量,然后将 shift 与一个位屏蔽进行对比。如下例,可用 And 运算符和 shift 参数一起来测试条件是否大于 0。该条件说明该修正键被按下: ShiftDown = (Shift And vbShiftMask) > 0 可按此例在一个过程中测试任何条件的组合: If ShiftDown And CtrlDown Then 注意 如果 KeyPreview 属性被设置为 True,则一个窗体先于该窗体上的控件接收到此事件。可用 KeyPreview 属性来创建全局键盘处理例程。
hongss 2017-07-07
  • 打赏
  • 举报
回复
实际上就是一个按键按下时的三个动作分解
of123 2017-07-07
  • 打赏
  • 举报
回复
首先,它们触发的时间顺序是 KeyDown - KeyPress - KeyUp。 其次,事件的参数不同。 KeyPress 只有一个参数 KeyAscii。例如你按下了大写 A 就会返回 65——Asc("A") = 65。也就是说,它只对有 ASCII 编码的键有效。 KeyDown 和 KeyUp 都有两个参数:KeyCode 和 Shift。 KeyCode 是键码,是一个数字。不过 VB 有一些键码常量可帮助到你:vbKeyA, vbKeyW, vbKeyF1, vbKeyPgUp 等等。你可以不用去记它们的数值。 Shift 表示 Ctrl, Shift 和 Alt 有哪个或哪几个按了下去。也有专用的常量: vbShiftMask = 1 vbCtrlMask = 2 vbAltMask = 4 你可以用 (Shit And vbShiftMask) 来检查 Shift 键是否按下。余类推。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧