使用鼠标事件 (Windows 窗体 .NET)

大多数 Windows 窗体程序通过处理鼠标事件来处理鼠标输入。 本文概述了鼠标事件,包括有关何时使用每个事件以及为每个事件提供的数据的详细信息。 有关一般事件的详细信息,请参阅 事件概述(Windows 窗体 .NET)

鼠标事件

响应鼠标输入的主要方法是处理鼠标事件。 下表显示了鼠标事件,并描述了它们何时触发。

鼠标事件 描述
Click 在释放鼠标按钮时(通常在 MouseUp 事件之前)发生此事件。 此事件的处理程序接收类型为 EventArgs的参数。 当你只需要确定单击何时发生时,处理此事件。
MouseClick 当用户使用鼠标单击控件时发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。 当需要在鼠标点击发生时获取有关鼠标的信息时,处理此事件。
DoubleClick 双击控件时发生此事件。 此事件的处理程序接收类型为 EventArgs的参数。 仅当需要确定何时发生双击时处理此事件。
MouseDoubleClick 当用户使用鼠标双击控件时发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。 如果需要在双击发生时获取有关鼠标的信息,请处理此事件。
MouseDown 当鼠标指针位于控件上并且用户按下鼠标按钮时,将发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。
MouseEnter 当鼠标指针进入控件的边框或工作区时,将发生此事件,具体取决于控件的类型。 此事件的处理程序接收类型为 EventArgs的参数。
MouseHover 当鼠标指针停止并停留在控件上时,将发生此事件。 此事件的处理程序接收类型为 EventArgs的参数。
MouseLeave 当鼠标指针离开控件的边框或工作区时,将发生此事件,具体取决于控件的类型。 此事件的处理程序接收类型为 EventArgs的参数。
MouseMove 当鼠标指针在控件上移动时发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。
MouseUp 当鼠标指针位于控件上并且用户释放鼠标按钮时,会发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。
MouseWheel 当用户在控件具有焦点时旋转鼠标滚轮时发生此事件。 此事件的处理程序接收类型为 MouseEventArgs的参数。 可以使用 MouseEventArgsDelta 属性来测量鼠标滚动的距离。

鼠标信息

将发送 MouseEventArgs 到与鼠标按钮单击和鼠标移动跟踪相关的鼠标事件处理程序。 MouseEventArgs 提供有关鼠标的当前状态的信息,包括鼠标指针在客户端坐标中的位置、按下鼠标按钮以及鼠标滚轮是否滚动。 一些鼠标事件(例如,当鼠标指针进入或离开控件边界时引发的事件)将 EventArgs 发送到事件处理程序,但没有进一步的信息。

如果想要了解鼠标按钮的当前状态或鼠标指针的位置,并且想要避免处理鼠标事件,还可以使用 Control 类的 MouseButtonsMousePosition 属性。 MouseButtons 返回当前按下哪些鼠标按钮的信息。 MousePosition 返回鼠标指针的屏幕坐标,等效于 Position返回的值。

在屏幕和客户端坐标之间转换

由于某些鼠标位置信息位于客户端坐标中,有些位于屏幕坐标中,因此可能需要将点从一个坐标系转换为另一个坐标系统。 可以使用 Control 类上提供的 PointToClientPointToScreen 方法轻松执行此操作。

标准单击事件行为

如果要按正确的顺序处理鼠标单击事件,则需要知道在 Windows 窗体控件中引发单击事件的顺序。 当按下并释放任何受支持的鼠标按钮时,所有 Windows 窗体控件都按相同的顺序引发单击事件,但以下列表中指出的各个控件除外。 以下列表显示了鼠标单击一个按钮时所引发的事件的顺序:

  1. MouseDown 事件。
  2. Click 事件。
  3. MouseClick 事件。
  4. MouseUp 事件。

以下是双击鼠标引发的事件顺序:

  1. MouseDown 事件。

  2. Click 事件。

  3. MouseClick 事件。

  4. MouseUp 事件。

  5. MouseDown 事件。

  6. DoubleClick 事件。

    这可能会有所不同,具体取决于控件是否将 StandardDoubleClick 样式位设置为 true。 有关如何设置 ControlStyles 位的详细信息,请参阅 SetStyle 方法。

  7. MouseDoubleClick 事件。

  8. MouseUp 事件。

独立控件

以下控件不符合标准鼠标单击事件行为:

切换控件的绘制行为

切换控件(如派生自 ButtonBase 类的控件)具有以下独特的绘画行为与鼠标单击事件的组合:

  1. 用户按下鼠标按钮。

  2. 控件在按下状态下进行绘制。

  3. 触发 MouseDown 事件。

  4. 用户释放鼠标按钮。

  5. 控件呈现为凸起状态。

  6. 引发 Click 事件。

  7. MouseClick 事件被引发。

  8. 引发 MouseUp 事件。

    注意

    如果用户在按住鼠标按钮时将指针移出切换控件(例如在按住时将鼠标从 Button 控件上移开),则切换控件将显示为凸起状态,并且仅会触发 MouseUp 事件。 在这种情况下,不会发生 ClickMouseClick 事件。

另请参阅