KeyDown 事件

expandtri全部显示

当用户在窗体控件获得焦点的情况下按下按键时,便发生了 KeyDown 事件。当使用中的 SendKeys 操作或 Visual Basic 中的 SendKeys 语句将键击发送到窗体或控件时,KeyDown 事件也发生。

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

Object    窗体或窗体上控件的名称。

KeyCode    键代码,如 vbKeyF1(F1 键)或 vbKeyHome(HOME 键)。要指定键代码,请使用“对象浏览器”中显示的固有常量。通过将 KeyCode 设为 0,可以禁止对象接收键击。

Shift    SHIFT、CTRL 和 ALT 键在发生事件时的状态。如果需要测试 Shift 参数,则可以使用以下固有常量之一作为位掩码:

常量说明

acShiftMask SHIFT 键的位掩码。

acCtrlMask CTRL 键的位掩码。

acAltMask ALT 键的位掩码。

说明

注释  KeyDown 事件仅适用于窗体和窗体上的控件,而不适用于报表上的控件。

若要在这些事件发生时运行宏或事件过程,请将 OnKeyDown 属性设置为宏的名称或 [事件过程]。

对于这两个事件,获得焦点的对象将接收到所有的键击事件。窗体只有在它没有控件或它所有可见的控件都失效时才能获得焦点。

如果将窗体的 KeyPreview 属性设置为 Yes,窗体将会接收到所有的键盘事件,甚至包括那些对控件发生的键盘事件。通过设置该属性值,所有键盘事件将首先在窗体上发生,然后在获得焦点的控件上发生。无论哪个控件获得焦点,都可以在窗体中对按下的特定键作出响应。例如,可以让组合键 Ctrl+X 总在窗体上执行相同的操作。

如果按住一个键不放,KeyDown 和 KeyPress 事件将交替重复发生(KeyDown、KeyPress、KeyDown、KeyPress 以此类推),直到键释放,然后 KeyUp 事件才发生。

尽管在绝大部分键被按下时 KeyDown 事件都会发生,但它通常用于识别或区别以下的情况:

?扩展字符键,例如功能键。
?定位键,例如 Home、End、Page Up、Page Down、向上键、向下键、向右键、向左键及 Tab。
?键的组合和标准的键盘更改键(Shift、Ctrl 或 Alt)。
?数字键盘或键盘数字键。

当在以下情况下按键时,KeyDown 事件不发生:

?当窗体有一个 Default 属性设置为“是”的命令按钮时,按 Enter。

?当窗体有一个 Cancel 属性设置为“是”的命令按钮时,按 Esc。

blueup提示

ANSIKeyPress

在按下键或发送 ANSI 按键时 KeyDown 事件发生。KeyUp 事件则发生在按键或发送键所引起的任一事件之后。如果键击使焦点从一个控件移动到另一个控件,则在第一个控件上 KeyDown 事件发生,而在第二个控件上 KeyPress 和 KeyUp 事件发生。

有关相信信息,请参阅击键事件和鼠标单击事件的发生顺序。

如果在按下或发送键后显示一个模式对话框,则 KeyDown 和 KeyPress 事件将发生,但 KeyUp 事件不会发生。

可以使用 KeyDown 或 KeyUp 宏来响应当窗体或控件具有焦点时一旦用户按下或释放键这类事件。但是,宏无法返回键代码和确定按了哪个键,因此通常要用事件过程处理这些事件。

不能在 KeyDown 或 KeyUp 宏中使用 CancelEvent 操作。

示例

以下示例确定是否已经按下 Shift、Ctrl 或 Alt。

若要试用该示例,请将下列事件过程到添加到含有名为 KeyHandler 文本框的窗体中。

Private Sub KeyHandler_KeyDown(KeyCode As Integer, _

     Shift As Integer)

    Dim intShiftDown As Integer, intAltDown As Integer

    Dim intCtrlDown As Integer

    ' Use bit masks to determine which key was pressed.

    intShiftDown = (Shift And acShiftMask) > 0

    intAltDown = (Shift And acAltMask) > 0

    intCtrlDown = (Shift And acCtrlMask) > 0

    ' Display message telling user which key was pressed.

    If intShiftDown Then MsgBox "You pressed the SHIFT key."

    If intAltDown Then MsgBox "You pressed the ALT key."

    If intCtrlDown Then MsgBox "You pressed the CTRL key."

End Sub