Windows 窗体中的鼠标事件
处理鼠标输入时,经常需要知道鼠标指针的位置和鼠标按钮的状态。 本主题详细介绍如何从鼠标事件获取这种信息,并解释在 Windows 窗体控件中鼠标单击事件的引发顺序。 有关所有鼠标事件的列表和描述,请参见 Windows 窗体中鼠标输入的工作原理。 有关更多信息,请参见 事件概述(Windows 窗体) 和 事件处理程序概述(Windows 窗体) 和 事件处理程序概述(Windows 窗体) 和 事件概述(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 窗体控件中处理用户输入事件
个别控件
下列控件不符合标准的鼠标单击事件行为:
Button、CheckBox、ComboBox 和 RadioButton 控件
提示
对于 ComboBox 控件,如果用户单击编辑字段、按钮或列表中的项,则发生下面详细说明的事件行为。
单击左键:Click、MouseClick
单击右键:不引发任何单击事件
双击左键:Click、MouseClick;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 事件将不会发生。