我现在正在 MS Access 中进行编程,在浏览表单的属性时,我遇到了一个名为“key preview”的属性。MS Access 文档告诉它用于在控件的键盘事件之前调用表单的键盘事件。
我不确定这意味着什么,为什么可以使用这个属性?
我现在正在 MS Access 中进行编程,在浏览表单的属性时,我遇到了一个名为“key preview”的属性。MS Access 文档告诉它用于在控件的键盘事件之前调用表单的键盘事件。
我不确定这意味着什么,为什么可以使用这个属性?
如果 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
时,您应该会看到表单首先收到了键盘事件。