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 控件来使用验证功能,除了下述事件以外,您可能还会对 BeforeLabelEdit和 AfterLabelEdit事件感到兴趣。
|
o
以鼠标左键按一下:
Click
、
MouseClick
o
以鼠标右键按一下:
Click
、
MouseClick
o
以鼠标左键按两下:
Click
、
MouseClick
;
DoubleClick
、
MouseDoubleClick
o
以鼠标右键按两下:
Click
、
MouseClick
;
DoubleClick
、
MouseDoubleClick
·
TreeView
控件
注意事项
|
稍后详细说明的事件行为只有当使用者按一下项目本身或按一下 TreeView 控件中的项目右边时才会发生。按控件的其它地方并不会引发任何事件。如果您想要以 TreeView 控件来使用验证功能,除了下述事件以外,您可能还会对 BeforeCheck、BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck和 AfterLabelEdit等事件感到兴趣。
|
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 事件。在这种情况下,并不会发生 Click 或 MouseClick 事件。
|