Windows Form 中的鼠标事件

来源:互联网 发布:成都温江淘宝招人 编辑:程序博客网 时间:2024/06/04 01:38
Windows Forms 程序设计
Windows Form 中的鼠标事件
在处理鼠标输入时,通常会想要知道鼠标指针位置和鼠标按钮状态。这个主题提供关于如何从鼠标事件取得此项信息的详细内容,同时还说明鼠标 Click 事件在 Windows Form 控件中的引发顺序。如需所有鼠标事件的清单和描述,请参阅鼠标输入在 Windows Form 中的运作方式如需详细信息,请参阅事件概观事件处理例程概观
鼠标信息
MouseEventArgs会传送至与按一下鼠标按钮和追踪鼠标移动相关的鼠标事件处理例程。MouseEventArgs提供有关鼠标目前状态的信息,其中包括工作区坐标 (Client Coordinate) 中的鼠标指针位置、按下哪个鼠标按钮以及鼠标滚轮是否已卷动等信息。例如单纯通知鼠标何时进入或离开控件界限等数种鼠标事件会将EventArgs传送至事件处理例程,但不带任何详细信息。
如果想知道鼠标按钮的目前状态或鼠标指针位置,但要避免处理鼠标事件,则您也可以使用Control事件的MouseButtonsMousePosition属性。MouseButtons会传回关于目前按下的鼠标按钮是哪个的信息。MousePosition则传回鼠标指针的屏幕坐标 (Screen Coordinate),它即等同于Position所传回的值。
在屏幕坐标和工作区坐标之间转换
由于有些鼠标位置信息是工作区坐标格式而另一些则是屏幕坐标格式,您可能需要将某个点转换成另一种坐标系统。您可以藉由 Control 类别上可供使用的PointToClientPointToScreen方法,便能轻松执行这项工作。
标准 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 事件行为:
·             ButtonCheckBoxComboBoxRadioButton控件

注意事项
对于 ComboBox 控件而言,不论使用者是按了一下编辑字段、按钮或清单中的项目,下述的事件行为都会发生。

o                                    以鼠标左键按一下:ClickMouseClick
o                                    以鼠标右键按一下:不会引发 Click 事件
o                                    以鼠标左键按两下:ClickMouseClickClickMouseClick
o                                    以鼠标右键按两下:不会引发 Click 事件
·             TextBoxRichTextBoxListBoxMaskedTextBoxCheckedListBox控件

注意事项
当使用者按一下这些控件内的任何地方时,会发生下述的事件行为。

o                                    以鼠标左键按一下:ClickMouseClick
o                                    以鼠标右键按一下:不会引发 Click 事件
o                                    以鼠标左键按两下:ClickMouseClickDoubleClickMouseDoubleClick
o                                    以鼠标右键按两下:不会引发 Click 事件
·             ListView控件

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

o                                    以鼠标左键按一下:ClickMouseClick
o                                    以鼠标右键按一下:ClickMouseClick
o                                    以鼠标左键按两下:ClickMouseClickDoubleClickMouseDoubleClick
o                                    以鼠标右键按两下:ClickMouseClickDoubleClickMouseDoubleClick
·             TreeView控件

注意事项
稍后详细说明的事件行为只有当使用者按一下项目本身或按一下 TreeView 控件中的项目右边时才会发生。按控件的其它地方并不会引发任何事件。如果您想要以 TreeView 控件来使用验证功能,除了下述事件以外,您可能还会对 BeforeCheckBeforeSelectBeforeLabelEditAfterSelectAfterCheckAfterLabelEdit等事件感到兴趣。

o                                    以鼠标左键按一下:ClickMouseClick
o                                    以鼠标右键按一下:ClickMouseClick
o                                    以鼠标左键按两下:ClickMouseClickDoubleClickMouseDoubleClick
o                                    以鼠标右键按两下:ClickMouseClickDoubleClickMouseDoubleClick
切换控件的绘制行为
当切换控件 (例如衍生自ButtonBase类别的控件) 发生鼠标 Click 事件时,会产生下列特殊的绘制行为:
1.使用者按鼠标按钮。
2.控件在按下的状态中进行绘制。
3.便会引发 MouseDown 事件。
4.使用者放开鼠标按钮。
5.控件在上升的状态中进行绘制。
6.便会引发 Click 事件。
7.便会引发 MouseClick 事件。
8.便会引发 MouseUp 事件。

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