KeyDown 事件

此頁(yè)沒有內(nèi)容條目
內(nèi)容

expandtri全部顯示

當(dāng)用戶在窗體控件獲得焦點(diǎn)的情況下按下按鍵時(shí),便發(fā)生了 KeyDown 事件。當(dāng)使用中的 SendKeys 操作或 Visual Basic 中的 SendKeys 語(yǔ)句將鍵擊發(fā)送到窗體或控件時(shí),KeyDown 事件也發(fā)生。

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

Object    窗體或窗體上控件的名稱。

KeyCode    鍵代碼,如 vbKeyF1(F1 鍵)或 vbKeyHome(HOME 鍵)。要指定鍵代碼,請(qǐng)使用“對(duì)象瀏覽器”中顯示的固有常量。通過將 KeyCode 設(shè)為 0,可以禁止對(duì)象接收鍵擊。

Shift    SHIFT、CTRL 和 ALT 鍵在發(fā)生事件時(shí)的狀態(tài)。如果需要測(cè)試 Shift 參數(shù),則可以使用以下固有常量之一作為位掩碼:

常量說明

acShiftMask SHIFT 鍵的位掩碼。

acCtrlMask CTRL 鍵的位掩碼。

acAltMask ALT 鍵的位掩碼。

說明

注釋  KeyDown 事件僅適用于窗體和窗體上的控件,而不適用于報(bào)表上的控件。

若要在這些事件發(fā)生時(shí)運(yùn)行宏或事件過程,請(qǐng)將 OnKeyDown 屬性設(shè)置為宏的名稱或 [事件過程]。

對(duì)于這兩個(gè)事件,獲得焦點(diǎn)的對(duì)象將接收到所有的鍵擊事件。窗體只有在它沒有控件或它所有可見的控件都失效時(shí)才能獲得焦點(diǎn)。

如果將窗體的 KeyPreview 屬性設(shè)置為 Yes,窗體將會(huì)接收到所有的鍵盤事件,甚至包括那些對(duì)控件發(fā)生的鍵盤事件。通過設(shè)置該屬性值,所有鍵盤事件將首先在窗體上發(fā)生,然后在獲得焦點(diǎn)的控件上發(fā)生。無論哪個(gè)控件獲得焦點(diǎn),都可以在窗體中對(duì)按下的特定鍵作出響應(yīng)。例如,可以讓組合鍵 Ctrl+X 總在窗體上執(zhí)行相同的操作。

如果按住一個(gè)鍵不放,KeyDown 和 KeyPress 事件將交替重復(fù)發(fā)生(KeyDown、KeyPress、KeyDown、KeyPress 以此類推),直到鍵釋放,然后 KeyUp 事件才發(fā)生。

盡管在絕大部分鍵被按下時(shí) KeyDown 事件都會(huì)發(fā)生,但它通常用于識(shí)別或區(qū)別以下的情況:

?擴(kuò)展字符鍵,例如功能鍵。
?定位鍵,例如 Home、End、Page Up、Page Down、向上鍵、向下鍵、向右鍵、向左鍵及 Tab。
?鍵的組合和標(biāo)準(zhǔn)的鍵盤更改鍵(Shift、Ctrl 或 Alt)。
?數(shù)字鍵盤或鍵盤數(shù)字鍵。

當(dāng)在以下情況下按鍵時(shí),KeyDown 事件不發(fā)生:

?當(dāng)窗體有一個(gè) Default 屬性設(shè)置為“是”的命令按鈕時(shí),按 Enter。

?當(dāng)窗體有一個(gè) Cancel 屬性設(shè)置為“是”的命令按鈕時(shí),按 Esc。

blueup提示

ANSIKeyPress

在按下鍵或發(fā)送 ANSI 按鍵時(shí) KeyDown 事件發(fā)生。KeyUp 事件則發(fā)生在按鍵或發(fā)送鍵所引起的任一事件之后。如果鍵擊使焦點(diǎn)從一個(gè)控件移動(dòng)到另一個(gè)控件,則在第一個(gè)控件上 KeyDown 事件發(fā)生,而在第二個(gè)控件上 KeyPress 和 KeyUp 事件發(fā)生。

有關(guān)相信信息,請(qǐng)參閱擊鍵事件和鼠標(biāo)單擊事件的發(fā)生順序。

如果在按下或發(fā)送鍵后顯示一個(gè)模式對(duì)話框,則 KeyDown 和 KeyPress 事件將發(fā)生,但 KeyUp 事件不會(huì)發(fā)生。

可以使用 KeyDown 或 KeyUp 宏來響應(yīng)當(dāng)窗體或控件具有焦點(diǎn)時(shí)一旦用戶按下或釋放鍵這類事件。但是,宏無法返回鍵代碼和確定按了哪個(gè)鍵,因此通常要用事件過程處理這些事件。

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

示例

以下示例確定是否已經(jīng)按下 Shift、Ctrl 或 Alt。

若要試用該示例,請(qǐng)將下列事件過程到添加到含有名為 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