大多数 Windows 窗体程序通过处理鼠标事件来处理鼠标输入。 本文概述了鼠标事件,包括有关何时使用每个事件以及为每个事件提供的数据的详细信息。 有关一般事件的详细信息,请参阅 事件概述。
鼠标事件
响应鼠标输入的主要方法是处理鼠标事件。 下表显示了鼠标事件,并描述了它们何时触发。
鼠标事件 | DESCRIPTION |
---|---|
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,而没有进一步的信息。
如果想要知道鼠标按钮的当前状态或鼠标指针的位置,并且想要避免处理鼠标事件,还可以使用MouseButtons类的Control和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对于控件,如果用户单击编辑字段、按钮或列表中的项,则稍后将发生详细事件行为。
- 左键单击: ClickMouseClick
- 右键单击:未引发单击事件
- 左双击:Click,MouseClick;Click,MouseClick
- 右键单击:未引发单击事件
TextBox、、RichTextBoxListBox、MaskedTextBox和CheckedListBox控件
注释
当用户单击这些控件中的任何位置时,稍后将发生详细事件行为。
- 左键单击: ClickMouseClick
- 右键单击:未引发单击事件
- 左双击:Click,MouseClick,DoubleClickMouseDoubleClick
- 右键单击:未引发单击事件
ListView 控件
注释
仅当用户单击控件中的 ListView 项时,才会发生稍后详述的事件行为。 对于控件上的任何其他位置的单击,不会引发任何事件。 除了稍后介绍的事件之外,还有 BeforeLabelEdit 和 AfterLabelEdit 事件,如果您想为 ListView 控件使用验证,可能会对此感兴趣。
- 左键单击: ClickMouseClick
- 右键单击: ClickMouseClick
- 左双击:Click,MouseClick;DoubleClick,MouseDoubleClick
- 右键单击: Click, ; MouseClickDoubleClick,MouseDoubleClick
TreeView 控件
注释
仅当用户单击项本身或控件中 TreeView 项右侧时,才会发生稍后详述的事件行为。 对于控件上的任何其他位置的单击,不会引发任何事件。 除了稍后所述的事件之外,还有BeforeCheck、BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck和AfterLabelEdit事件,如果您想将验证与TreeView控件一起使用,您可能会对此感兴趣。
- 左键单击: ClickMouseClick
- 右键单击: ClickMouseClick
- 左双击:Click,MouseClick;DoubleClick,MouseDoubleClick
- 右键单击: Click, ; MouseClickDoubleClick,MouseDoubleClick
切换控件的绘制行为
切换控件(例如从 ButtonBase 类派生的控件)在与鼠标单击事件结合时具有以下独特的渲染行为:
用户按下鼠标按钮。
控件在按下状态下进行绘制。
引发该事件 MouseDown。
用户释放鼠标按钮。
控件绘制在凸起状态。
事件 Click 被引发。
该事件MouseClick被引发。
引发该事件 MouseUp。
注释
如果用户在鼠标按钮按下时将指针移出切换控件范围(例如在按下时将鼠标从控件Button上移开),那么切换控件显示为未按下状态,并且只有MouseUp事件会发生。 Click 或 MouseClick 事件在这种情况下不会发生。