Ms access 在KeyDown事件中访问VBA位屏蔽

Ms access 在KeyDown事件中访问VBA位屏蔽,ms-access,vba,Ms Access,Vba,我希望使用Access key事件,但需要更好地理解代码是如何工作的。在下面的代码中,我不明白“(Shift和acShiftMask)>0”是如何工作的。如果有人能帮助我理解位掩码和下面的代码是如何工作的,我将不胜感激 Private Sub KeyHandler_KeyDown(KeyCode As Integer, _ Shift As Integer) Dim intShiftDown As Integer, intAltDown As Integer Dim intCtrlDow

我希望使用Access key事件,但需要更好地理解代码是如何工作的。在下面的代码中,我不明白“(Shift和acShiftMask)>0”是如何工作的。如果有人能帮助我理解位掩码和下面的代码是如何工作的,我将不胜感激

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

当触发
KeyDown
事件时,
Shift
参数包含对Shift、CTRL和ALT键的状态进行编码的特定位。内置常量
acShiftMask
(=
1
)、
acCtrlMask
(=
2
)和
acAltMask
(=
4
)只包含编码这些特殊键之一的位(“掩码”)。按位计算,如下所示:

acShiftMask: 0000000000000001
acCtrlMask : 0000000000000010
acAltMask  : 0000000000000100
现在,如果用户同时按下SHIFT键和CTRL键,则
SHIFT
参数将如下所示:

Shift      : 0000000000000011
要检查是否按下了移位键,代码必须测试移位掩码的位,这是通过按位
运算符完成的:

0000000000000011 AND 0000000000000001 = 0000000000000001 (<>0)
可能重复的
0000000000000011 AND 0000000000000100 = 0000000000000000 (=0)