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

另请参阅