Windows Form 中的鼠标事件

Windows Forms 程序设计
Windows Form 中的鼠标事件
在处理鼠标输入时,通常会想要知道鼠标指针位置和鼠标按钮状态。这个主题提供关于如何从鼠标事件取得此项信息的详细内容,同时还说明鼠标 Click 事件在 Windows Form 控件中的引发顺序。如需所有鼠标事件的清单和描述,请参阅 鼠标输入在 Windows Form 中的运作方式 如需详细信息,请参阅 事件概观 事件处理例程概观
鼠标信息
MouseEventArgs 会传送至与按一下鼠标按钮和追踪鼠标移动相关的鼠标事件处理例程。 MouseEventArgs 提供有关鼠标目前状态的信息,其中包括工作区坐标 (Client Coordinate) 中的鼠标指针位置、按下哪个鼠标按钮以及鼠标滚轮是否已卷动等信息。例如单纯通知鼠标何时进入或离开控件界限等数种鼠标事件会将 EventArgs 传送至事件处理例程,但不带任何详细信息。
如果想知道鼠标按钮的目前状态或鼠标指针位置,但要避免处理鼠标事件,则您也可以使用 Control 事件的 MouseButtons MousePosition 属性。 MouseButtons 会传回关于目前按下的鼠标按钮是哪个的信息。 MousePosition 则传回鼠标指针的屏幕坐标 (Screen Coordinate) ,它即等同于 Position 所传回的值。
在屏幕坐标和工作区坐标之间转换
由于有些鼠标位置信息是工作区坐标格式而另一些则是屏幕坐标格式,您可能需要将某个点转换成另一种坐标系统。您可以藉由 Control 类别上可供使用的 PointToClient PointToScreen 方法,便能轻松执行这项工作。
标准 Click 事件行为
如果想要以正确顺序处理鼠标 Click 事件,您需要知道 Click 事件在 Windows Form 控件中的引发顺序。所有的 Windows Form 控件在按下和释放鼠标按钮时,除了以下个别控件提及的顺序之外,都是以相同的顺序引发 Click 事件 ( 不论是哪一个鼠标按钮 ) 。下表显示的是按一下单一鼠标按钮时所引发的事件顺序:
1. MouseDown 事件。
2. Click 事件。
3. MouseClick 事件。
4. MouseUp 事件。
以下是按两下鼠标按钮时所引发的事件顺序:
1. MouseDown 事件。
2. Click 事件。
3. MouseClick 事件。
4. MouseUp 事件。
5. MouseDown 事件。
6. DoubleClick 事件。 ( 这可能会依据特定控件的 StandardDoubleClick 样式位 (Style Bit) 是否设为 true 而有所不同。如需如何设定 ControlStyles 位的详细信息,请参阅 SetStyle 方法 )
7. MouseDoubleClick 事件。
8. MouseUp 事件。
如需示范鼠标 Click 事件顺序的程序代码范例,请参阅 HOW TO处理 Windows Form 控件中的使用者输入事件
个别控件
下列控件不符合标准鼠标 Click 事件行为:
·             Button CheckBox ComboBox RadioButton 控件

注意事项
对于 ComboBox 控件而言,不论使用者是按了一下编辑字段、按钮或清单中的项目,下述的事件行为都会发生。
o                                    以鼠标左键按一下: Click MouseClick
o                                    以鼠标右键按一下:不会引发 Click 事件
o                                    以鼠标左键按两下: Click MouseClick Click MouseClick
o                                    以鼠标右键按两下:不会引发 Click 事件
·             TextBox RichTextBox ListBox MaskedTextBox CheckedListBox 控件

注意事项
当使用者按一下这些控件内的任何地方时,会发生下述的事件行为。
o                                    以鼠标左键按一下: Click MouseClick
o                                    以鼠标右键按一下:不会引发 Click 事件
o                                    以鼠标左键按两下: Click MouseClick DoubleClick MouseDoubleClick
o                                    以鼠标右键按两下:不会引发 Click 事件
·             ListView 控件

注意事项
稍后详细说明的事件行为只有当使用者按一下 ListView 控件中的项目时才会发生。按控件的其它地方并不会引发任何事件。如果您想要以 ListView 控件来使用验证功能,除了下述事件以外,您可能还会对 BeforeLabelEditAfterLabelEdit事件感到兴趣。
o                                    以鼠标左键按一下: Click MouseClick
o                                    以鼠标右键按一下: Click MouseClick
o                                    以鼠标左键按两下: Click MouseClick DoubleClick MouseDoubleClick
o                                    以鼠标右键按两下: Click MouseClick DoubleClick MouseDoubleClick
·             TreeView 控件

注意事项
稍后详细说明的事件行为只有当使用者按一下项目本身或按一下 TreeView 控件中的项目右边时才会发生。按控件的其它地方并不会引发任何事件。如果您想要以 TreeView 控件来使用验证功能,除了下述事件以外,您可能还会对 BeforeCheckBeforeSelectBeforeLabelEditAfterSelectAfterCheckAfterLabelEdit等事件感到兴趣。
o                                    以鼠标左键按一下: Click MouseClick
o                                    以鼠标右键按一下: Click MouseClick
o                                    以鼠标左键按两下: Click MouseClick DoubleClick MouseDoubleClick
o                                    以鼠标右键按两下: Click MouseClick DoubleClick MouseDoubleClick
切换控件的绘制行为
当切换控件 ( 例如衍生自 ButtonBase 类别的控件 ) 发生鼠标 Click 事件时,会产生下列特殊的绘制行为:
1. 使用者按鼠标按钮。
2. 控件在按下的状态中进行绘制。
3. 便会引发 MouseDown 事件。
4. 使用者放开鼠标按钮。
5. 控件在上升的状态中进行绘制。
6. 便会引发 Click 事件。
7. 便会引发 MouseClick 事件。
8. 便会引发 MouseUp 事件。

注意事项
如果使用者在鼠标按下时将指针移出切换控件 (例如在按下 Button 控件时移开鼠标),切换控件将以上升状态绘制并且仅发生 MouseUp 事件。在这种情况下,并不会发生 ClickMouseClick 事件。
 

你可能感兴趣的:(Windows Form 中的鼠标事件)