在下列情况下,KeyDown 和 KeyUp 事件不发生:
? ?
在带有命令按钮(其 Default 属性为 True)的窗体上按 Enter。 在带有命令按钮(其 Cancel 属性为 True)的窗体上按 Esc。
在按下或发送一个 ANSI 键时,KeyDown 和 KeyPress 事件发生。KeyUp 事件发生在按下或发送该键所引起的任何控件事件之后。若一次击键导致了焦点从一个控件移到另一个控件,则对第一个控件发生 KeyDown 事件,对第二控件发生 KeyPress 和 KeyUp 事件。
和键盘相关的事件序列为:
1. KeyDown 2. KeyPress 3. KeyUp
注意 KeyDown 和 KeyUp 事件仅用于窗体上的窗体和控件。要解释 ANSI 字符或找出与被按下的键相对应的 ANSI 字符,用 KeyPress 事件。
二十四、KeyPress 事件
当用户按下一个 ANSI 键时该事件发生。 语法
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger) KeyPress 事件的语法有以下几个成分:
成分
说明
43
object 必需。一个有效的对象。
KeyANSI 必需。整数值,代表标准的数字 ANSI 键代码。
说明
当用户按下一个键,在运行的窗体上产生可键入字符(一个 ANSI 键),而该窗体或该窗体上的某个控件具有焦点时,KeyPress 事件发生。该事件可以发生在该键被释放之前,也可以发生在该键被释放之后。当用宏的 SendKey 操作或用 Visual Basic 的 SendKeys 语句,将一个 ANSI 键操作发送到窗体或控件的时候,这个事件也会发生。 KeyPress 事件发生在下列任意键被按下时:
? ? ? ? ?
任何可打印的键盘字符。
Ctrl 与标准字母表中字符的组合。 Ctrl 与任何特殊字符的组合。 Backspace。 Esc。
在下面情况下,KeyPress 事件不发生:
? ? ? ?
按下 Tab。 按下 Enter。 按任何方向键。
引起焦点在控件之间移动的击键操作。
注意 Backspace 是 ANSI 字符集的一部分,而 Delete 不是。在一个控件中用 Backspace 删除一个字符将引发 KeyPress 事件;而用 Delete 删除一个字符则不引发 KeyPress 事件。
按住产生 ANSI 键代码的键不放,KeyDown 和 KeyPress 事件交替重复发生。当释放此键,KeyUp 事件发生。具有焦点的窗体或控件接收所有的击键操作。只有没有控件的窗体,或者其所有可视控件都失效的窗体才可能有焦点。
KeyPress 事件的默认操作是处理被按下键所对应的事件代码。KeyANSI 指出了与所按下的键或组合键相对应的 ANSI 字符。KeyPress 事件把每个字符的大写和小写解释为互相独立的键码,因而作为两个独立的字符处理。
44
为了响应键盘的物理状态,或处理 KeyPress 事件无法辨认的击键操作,比如功能键、翻阅键或这些键与键盘组合键(Alt、Shift 或 Ctrl)的任意组合,可使用 KeyDown 和 KeyUp 事件过程。
和键盘相关的事件序列有:
1. KeyDown 2. KeyPress 3. KeyUp
二十五、MouseDown 和 MouseUp 事件
用户单击鼠标按键时发生。用户按下鼠标按键时发生 MouseDown 事件;用户释放鼠标按键时发生 MouseUp 事件。 语法
对于多页和 TabStrip
Private Sub object_MouseDown( index As Long, ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)
Private Sub object_MouseUp( index As Long, ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)
对于其他控件
Private Sub object_MouseDown( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)
Private Sub object_MouseUp( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single) MouseDown 和 MouseUp 事件的语法包含以下成分:
45
成分 object index Button Shift X, Y
必需。一个有效的对象。
说明
必需。发生特定事件的多页和 TabStrip 中的页索引或标签索引。 必需。标识引起该事件的鼠标按键的整数值。 必需。规定 Shift、Ctrl 和 Alt 的状态。
必需。窗体、框架或页的位置的横坐标与纵坐标,以磅为单位,分别从左边和顶边开始测量。
设置
Button 的设置如下:
常量 fmButtonLeft fmButtonRight
1 2 值
按下左键。 按下右键。 按下中键。
说明
fmButtonMiddle 4
Shift 的设置如下:
值 1 2 3 4 5 6 7
按下 Shift。 按下 Ctrl。
同时按下 Shift 和 Ctrl。 按下 Alt。
同时按下 Alt 和 Shift。 同时按下 Alt 和 Ctrl。 同时按下 Alt 、Shift 和 Ctrl。
说明
用于标识键盘组合键的常量:
46
常量 值 说明
检测 Shift 的标记。 检测 Ctrl 的标记。 检测 Alt 的标记。
fmShiftMask 1 fmCtrlMask 2 fmAltMask
4
说明
对于多页,MouseDown 事件发生在用户在控件上按下鼠标按键的时候。
对于 TabStrip,索引参数标识用户单击的标签。索引为 -1 时,表示用户没有单击标签。例如,如果控件的右上角没有标签,单击右上角会将索引值置为 -1。
对于窗体,在空白区、记录选择器或滚动条上按下和释放鼠标按键会产生 MouseDown 和 MouseUp 事件。
与鼠标有关的事件序列:
1. MouseDown 2. MouseUp 3. Click 4. DblClick 5. MouseUp
MouseDown 或者 MouseUp 事件过程规定了按下或释放鼠标按键时应执行的动作。
MouseDown 和 MouseUp 事件能够区别鼠标的左、右、中按钮。也可以为使用 Shift、Ctrl 和 Alt 键盘组合键的鼠标—键盘组合编写代码。
如果在鼠标指针在窗体或控件上时按下鼠标按键,该对象“捕捉”鼠标并接收所有的鼠标事件,直到并包含最后的 MouseUp 事件。这意味着鼠标事件返回的鼠标指针的 X,Y 坐标不会总在接收这些事件的对象的边界之内。
如果鼠标按键被连续按下,捕捉鼠标的对象接收所有连续的鼠标事件,直到所有的按键被释放。
用 Shift 参数标识在 MouseDown 或 MouseUp 事件发生时 Shift、Ctrl 和 Alt 的状态。例如,如果 Ctrl 和 Alt 被同时按下,则 Shift 的值为 6。
二十六、MouseMove 事件
47