Windows 窗体中的鼠标事件
处理鼠标输入时,通常需要知道鼠标指针的位置和鼠标按钮的状态。 本主题详细介绍了如何从鼠标事件中获取此信息,并说明在 Windows 窗体控件中引发鼠标单击事件的顺序。 有关所有鼠标事件的列表和说明,请参阅 Windows 窗体中的鼠标输入工作原理。 另请参阅 事件处理程序概述(Windows 窗体) 和 事件概述(Windows 窗体)。
鼠标信息
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 事件。
有关演示鼠标单击事件顺序的代码示例,请参阅 如何:处理 Windows 窗体控件中的用户输入事件。
独立控件
以下控件不符合标准鼠标单击事件行为:
-
注意
对于 ComboBox 控件,如果用户单击编辑字段、按钮或列表中的项,则稍后将发生详细事件行为。
左键单击:Click,MouseClick
右键单击:没有触发点击事件
右键双击:未引发单击事件
TextBox、RichTextBox、ListBox、MaskedTextBox和 CheckedListBox 控件
注意
当用户单击这些控件中的任何位置时,稍后将发生详细事件行为。
左键单击:Click,MouseClick
右键单击:未触发点击事件
右键双击:未引发单击事件
ListView 控件
注意
仅当用户单击 ListView 控件中的项时,才会发生稍后详述的事件行为。 控件上单击任何其他位置时,不会引发任何事件。 除了稍后介绍的事件,还有 BeforeLabelEdit 和 AfterLabelEdit 事件。如果您希望将验证与 ListView 控件一起使用,您可能会对这些事件感兴趣。
左键单击:Click,MouseClick
右键单击:Click、MouseClick
TreeView 控件
注意
仅当用户单击项本身或 TreeView 控件中项右侧时,才会发生稍后详述的事件行为。 在控件的其他任何位置单击时,不会触发任何事件。 除了稍后所述的事件之外,还有 BeforeCheck、BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck和 AfterLabelEdit 事件,如果想要将验证与 TreeView 控件一起使用,则可能对你感兴趣。
左键单击:Click,MouseClick
右键单击:Click、MouseClick
切换控件的绘制行为
切换控件(如派生自 ButtonBase 类的控件)具有以下独特的绘画行为与鼠标单击事件的组合:
用户按下鼠标按钮。
控件以按下状态绘制。
MouseDown 事件被引发。
用户释放鼠标按钮。
控制在凸起状态下绘制。
引发 Click 事件。
引发 MouseClick 事件。
MouseUp 事件被引发。
注意
如果用户在按住鼠标按钮时将指针移出切换控件(例如,在按下时将鼠标从 Button 控件上移开),那么切换控件将显示在凸起的状态,并且仅发生 MouseUp 事件。 在这种情况下,不会发生 Click 或 MouseClick 事件。