MS Access中表单的"键预览"属性是什么意思?

Jay*_*Jay 4 forms ms-access ms-access-2010 keypreview

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

我不知道这意味着什么,可能会使用这个属性?

Ren*_*uis 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
Run Code Online (Sandbox Code Playgroud)

现在,打开表单并键入一个键.
如果你按下了Q键,你应该在即时窗口中看到类似的东西:

控制键盘事件

只有文本框收到了事件.

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

表单和控制键盘事件