Windows 窗体中的鼠标事件

处理鼠标输入时,经常需要知道鼠标指针的位置和鼠标按钮的状态。 本主题详细介绍如何从鼠标事件获取这种信息,并解释在 Windows 窗体控件中鼠标单击事件的引发顺序。 有关所有鼠标事件的列表和描述,请参见 Windows 窗体中鼠标输入的工作原理。 有关更多信息,请参见 事件概述(Windows 窗体)事件处理程序概述(Windows 窗体)事件处理程序概述(Windows 窗体)事件概述(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 事件将不会发生。

请参见

其他资源

Windows 窗体应用程序中的鼠标输入