Private Sub object_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Object 窗体、窗体节或窗体上控件的名称。
Button 按下 (MouseDown) 或释放 (MouseUp) 以触发事件的按钮。如果需要测试 Button 参数,则可以使用以下固有常量之一作为位掩码:
常量说明
acLeftButton 鼠标左键的位掩码。
acRightButton 鼠标右键的位掩码。
acMiddleButton 鼠标中间键的位掩码。
Shift 在按下或释放 Button 参数所指定的按钮时 SHIFT、CTRL 和 ALT 键的状态。如果需要测试 Shift 参数,则可以使用以下固有常量之一作为位掩码:
常量说明
acShiftMask SHIFT 键的位掩码。
acCtrlMask CTRL 键的位掩码。
acAltMask ALT 键的位掩码。
X, Y 鼠标指针当前位置的 x 和 y 座标。X 和 Y 参数始终以缇为单位表示。
MouseMove 事件仅适用于窗体、窗体的节和窗体上的控件,不适用于报表上的控件。
该事件不适用于附到其他控件上的标签,例如文本框的标签。它只适用于“独立”的标签。在附属标签中移动鼠标与在标签所附属的控件中移动鼠标有相同的效果。这种情况下,将只发生控件的正常事件,而不会发生附属标签的独立事件。
若要在该事件发生时执行宏或事件过程,请将 OnMouseMove 属性设置为宏的名称或 [事件过程]。
当鼠标指针在对象上移动时,将连续地产生 MouseMove 事件,除非另有对象也产生了鼠标事件,否则只要指针位于对象的边框内,对象就能识别 MouseMove 事件。
若要使窗体的 MouseMove 事件发生,请在窗体空白区域、记录选定器或滚动条上移动鼠标指针。要使窗体节的 MouseMove 事件发生,请在窗体节的空白区域上移动鼠标指针。
注释
? | 即使鼠标不动,移动窗体也会触发 MouseMove 事件。当窗体在指针下面移动时,也将产生 MouseMove 事件。如果宏或事件过程为响应 MouseMove 事件而移动窗体,事件将级联发生(即连续地产生 MouseMove 事件)。 |
? | 如果两个控件非常接近,当在其间隙中快速移动指针时,可能不会针对该间隙发生 MouseMove 事件(例如,这可能是窗体节的 MouseMove 事件)。在这种情况下,可能需要对相邻控件中以及窗体节中的 MouseMove 事件作出响应。 |
若要运行宏或事件过程以响应鼠标键的按下和释放事件,请使用 MouseDown 和 MouseUp 事件。
可以使用 MouseMove 宏在一旦用户将鼠标移过窗体或控件上时进行响应。但是,当移动发生时,宏无法返回按钮代码和确定鼠标按钮的状态或鼠标指针的坐标,因此通常要用事件过程处理这些事件。
不能在 MouseMove 宏中使用 CancelEvent 操作。
下面的示例确定鼠标的位置以及是否按鼠标左键和/或 SHIFT 键。移动鼠标时,鼠标指针位置的 x 和 y 坐标会显示在标签控件中。
若要试用该示例,请将下面的事件过程添加到包含名为“Coordinates”标签的窗体中:
Private Sub Detail_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim intShiftDown As Integer, intLeftButton As Integer
Me!Coordinates.Caption = X & ", " & Y
' Use bit masks to determine state of
' SHIFT key and left button.
intShiftDown = Shift And acShiftMask
intLeftButton = Button And acLeftButton
' Check that SHIFT key and left button
' are both pressed.
If intShiftDown And intLeftButton > 0 Then
MsgBox "Shift key and left mouse button were pressed."
End If