使用鼠标事件 (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的参数。 可以使用 MouseEventArgs 的 Delta 属性来测量鼠标滚动的距离。 |
鼠标信息
将发送 MouseEventArgs 到与鼠标按钮单击和鼠标移动跟踪相关的鼠标事件处理程序。 MouseEventArgs 提供有关鼠标的当前状态的信息,包括鼠标指针在客户端坐标中的位置、按下鼠标按钮以及鼠标滚轮是否滚动。 一些鼠标事件(例如,当鼠标指针进入或离开控件边界时引发的事件)将 EventArgs 发送到事件处理程序,但没有进一步的信息。
如果想要了解鼠标按钮的当前状态或鼠标指针的位置,并且想要避免处理鼠标事件,还可以使用 Control 类的 MouseButtons 和 MousePosition 属性。 MouseButtons 返回当前按下哪些鼠标按钮的信息。 MousePosition 返回鼠标指针的屏幕坐标,等效于 Position返回的值。
在屏幕和客户端坐标之间转换
由于某些鼠标位置信息位于客户端坐标中,有些位于屏幕坐标中,因此可能需要将点从一个坐标系转换为另一个坐标系统。 可以使用 Control 类上提供的 PointToClient 和 PointToScreen 方法轻松执行此操作。
标准单击事件行为
如果要按正确的顺序处理鼠标单击事件,则需要知道在 Windows 窗体控件中引发单击事件的顺序。 当按下并释放任何受支持的鼠标按钮时,所有 Windows 窗体控件都按相同的顺序引发单击事件,但以下列表中指出的各个控件除外。 以下列表显示了鼠标单击一个按钮时所引发的事件的顺序:
- MouseDown 事件。
- Click 事件。
- MouseClick 事件。
- MouseUp 事件。
以下是双击鼠标引发的事件顺序:
MouseDown 事件。
Click 事件。
MouseClick 事件。
MouseUp 事件。
MouseDown 事件。
DoubleClick 事件。
这可能会有所不同,具体取决于控件是否将 StandardDoubleClick 样式位设置为
true
。 有关如何设置 ControlStyles 位的详细信息,请参阅 SetStyle 方法。MouseDoubleClick 事件。
MouseUp 事件。
独立控件
以下控件不符合标准鼠标单击事件行为:
-
注意
对于 ComboBox 控件,如果用户单击编辑字段、按钮或列表中的项,则稍后将发生详细事件行为。
- 左键单击:Click、MouseClick
- 右键单击:未引发单击事件
- 左双击:Click,MouseClick;Click,MouseClick
- 右键双击:未引发单击事件
TextBox、RichTextBox、ListBox、MaskedTextBox和 CheckedListBox 控件
注意
当用户单击这些控件中的任何位置时,稍后将发生详细事件行为。
- 左键单击:Click、MouseClick
- 右键单击:未引发单击事件
- 左双击:Click、MouseClick、DoubleClick、MouseDoubleClick
- 右键单击:未引发单击事件
ListView 控件
注意
仅当用户单击 ListView 控件中的项时,才会发生稍后详述的事件行为。 在控件的其他任意位置单击不会引发任何事件。 除了稍后介绍的事件之外,还有 BeforeLabelEdit 和 AfterLabelEdit 事件,如果您希望在 ListView 控件中使用验证功能,可能会对此感兴趣。
- 左键单击:Click、MouseClick
- 右键单击:Click、MouseClick
- 左双击:Click,MouseClick;DoubleClick,MouseDoubleClick
- 右键单击:Click,MouseClick;DoubleClick,MouseDoubleClick
TreeView 控件
注意
仅当用户单击项本身或 TreeView 控件中项右侧时,才会发生稍后详述的事件行为。 在控件的其他任何位置单击时,不会触发任何事件。 除了稍后所述的事件之外,还有 BeforeCheck、BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck和 AfterLabelEdit 事件,如果想要将验证与 TreeView 控件一起使用,则可能对你感兴趣。
- 左键单击:Click、MouseClick
- 右键单击:Click、MouseClick
- 左双击:Click,MouseClick;DoubleClick,MouseDoubleClick
- 右键单击:Click,MouseClick;DoubleClick,MouseDoubleClick
切换控件的绘制行为
切换控件(如派生自 ButtonBase 类的控件)具有以下独特的绘画行为与鼠标单击事件的组合:
用户按下鼠标按钮。
控件在按下状态下进行绘制。
触发 MouseDown 事件。
用户释放鼠标按钮。
控件呈现为凸起状态。
引发 Click 事件。
MouseClick 事件被引发。
引发 MouseUp 事件。
注意
如果用户在按住鼠标按钮时将指针移出切换控件(例如在按住时将鼠标从 Button 控件上移开),则切换控件将显示为凸起状态,并且仅会触发 MouseUp 事件。 在这种情况下,不会发生 Click 或 MouseClick 事件。