博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

粘贴一点有用的东西留存-- Control 类的事件顺序

Posted on 2009-06-11 22:27  sashow  阅读(479)  评论(0编辑  收藏  举报

用户交互操作最好描述为控件创建和响应的各种事件。一些比较常见的事件有Click、DoubleClick、KeyDown、KeyPress、Validating和Paint。

鼠标事件Click、DoubleClick、MouseDown、MouseUp、MouseEnter、MouseLeave和 MouseHover处理鼠标和控件的交互操作。如果处理Click和DoubleClick事件,每次捕获一个DoubleClick事件时,也会引发 Click事件。如果处理不正确,就会出现我们不希望的结果。Click和DoubleClick事件都把EventArgs作为其参数,而 MouseDown和MouseUp事件把MouseEventArgs作为其参数。MouseEventArgs包含几个有用的信息,例如单击的按钮、 按钮被单击的次数、鼠标轮制动器(鼠标轮上的凹槽)的数目和鼠标的当前XY坐标。如果可以访问这些信息,就必须处理MouseDown或MouseUp事 件,而不是Click或DoubleClick事件。

键盘事件的工作方式与此类似:需要一些信息来确定处理什么事件。对于简单的情况,KeyPress事件接收一个 KeyPressEventArgs,它包含表示被按键的字符值KeyChar。Handled属性用于确定事件是否已处理。把Handled属性设置为 true,事件就不会由操作系统进行默认处理。如果需要被按的键的更多信息,则处理KeyDown或KeyUp事件会比较合适。它们都接收 KeyEventArgs。KeyEventArgs中的属性包括Ctrl、Alt或Shift键是否被按下。KeyCode属性返回一个Keys枚举 值,表示被按下的键。与KeyPressEventArgs.KeyChar不同,KeyCode属性指定键盘上的每个键,而不仅仅是字母数字键。 KeyData属性返回一个Key值,还设置修饰符。修饰符与值进行OR运算,指定是否同时按下了Shift或Ctrl键。KeyValue属性是 Keys枚举的整数值。Modifiers属性包含一个Keys值,它表示被按下的修饰符键。如果选择了多个修饰符键,这些值就进行OR运算。键盘事件以 下述顺序来引发:

(1) KeyDown

(2) KeyPress

(3) KeyUp

Validating、Validated、Enter、Leave、GotFocus和LostFocus事件都处理获得焦点(或被激活)和失去 焦点的控件。在用户用tab键选择一个控件或用鼠标选择该控件时,该控件就获得了焦点。Enter、Leave、GotFocus和LostFocus事 件的功能似乎非常类似。GotFocus和LostFocus事件是低级事件,与Windows消息WM_SETFOCUS和WM_KILLFOCUS相 关。一般应尽可能使用Enter和Leave事件。Validating和Validated事件在验证控件时发生。这些事件接收一个 CancelEventArgs,利用该参数,把Cancel属性设置为true,就可以取消以后的事件。如果定制了验证代码,而且验证失败,就可以把 Cancel属性设置为true,且控件也不会失去焦点。Validating事件在验证过程中发生,Validated事件在验证过程后发生。这些事件 的引发顺序如下:

(1) Enter

(2) GotFocus

(3) Leave

(4) Validating

(5) Validated

(6) LostFocus

理解这些事件的引发顺序是很重要的,可以避免不小心创建递归事件。例如,在控件的LostFocus事件中设置控件的焦点,就会创建一个消息死锁,且应用程序会停止响应。