Windows 窗体中的鼠标事件

处理鼠标输入时,通常需要知道鼠标指针的位置和鼠标按钮的状态。 本主题详细介绍了如何从鼠标事件中获取此信息,并说明在 Windows 窗体控件中引发鼠标单击事件的顺序。 有关所有鼠标事件的列表和说明,请参阅 Windows 窗体中的鼠标输入工作原理。 另请参阅 事件处理程序概述(Windows 窗体)事件概述(Windows 窗体)

鼠标信息

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 事件。

有关演示鼠标单击事件顺序的代码示例,请参阅 如何:处理 Windows 窗体控件中的用户输入事件

独立控件

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

切换控件的绘制行为

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

  1. 用户按下鼠标按钮。

  2. 控件以按下状态绘制。

  3. MouseDown 事件被引发。

  4. 用户释放鼠标按钮。

  5. 控制在凸起状态下绘制。

  6. 引发 Click 事件。

  7. 引发 MouseClick 事件。

  8. MouseUp 事件被引发。

    注意

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

另请参阅