4

我现在正在 MS Access 中进行编程,在浏览表单的属性时,我遇到了一个名为“key preview”的属性。MS Access 文档告诉它用于在控件的键盘事件之前调用表单的键盘事件。

我不确定这意味着什么,为什么可以使用这个属性?

4

1 回答 1

7

如果 KeyPreview 属性设置为 true,则表单将在控件接收到键盘事件之前接收到键盘事件,从而使您有机会在表单级别对其进行操作。

现在,假设您有一个带有许多控件的表单。
想象一下,您希望允许用户按键盘上的 F2 键来执行某些操作,例如打开另一个表单、播放音乐或其他任何操作。

在 Access 中,与大多数 UI 编程一样,任何时候只有一个控件可以接收焦点。因此,如果焦点在文本框上,当您按下 F2 时,该文本框键盘事件将触发。
您可以从文本框事件中捕获该按键,但如果用户从另一个控件按 F2,则不会检测到它,除非您还检测到该控件本身按 F2。

因此,为了使事情更容易,您可以将表单设置为首先接收键盘事件,然后再将它们传递给具有焦点的控件,让您有机会检测到用户在一个地方按下了 F2,而不是让连接每个控件以检测该按键。

例子

将单个文本框添加mytextbox到新表单。在表单背后的代码中,添加以下事件以捕获表单和文本框的键盘事件:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyDown(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    Debug.Print "Form_KeyPress(KeyAscii:" & KeyAscii & ")"
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyUp(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub mytextbox_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "mytextbox_KeyDown(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub mytextbox_KeyPress(KeyAscii As Integer)
    Debug.Print "mytextbox_KeyPress(KeyAscii:" & KeyAscii & ")"
End Sub

Private Sub mytextbox_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "mytextbox_KeyUp(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

现在,打开表单并键入一个键。
如果您按下该Q键,您应该会在即时窗口中看到类似这样的内容:

控制键盘事件

只有文本框接收到事件。

现在,将 KeyPreview 属性设置为 true(是),当您打开表单并点击Q时,您应该会看到表单首先收到了键盘事件。

表单和控制键盘事件

于 2012-11-02T07:14:03.647 回答