(一)当通过使用键盘(Tab、Shift Tab等)或调用 Select 或 SelectNextControl 方法或通过将
ContainerControl.ActiveControl 属性设置为当前窗体等方式更改焦点时,焦点事件按以下顺序发生:
Enter --> GotFocus --> Leave --> Validating --> Validated --> LostFocus
(二)当通过使用鼠标或调用 Focus 方法的方式更改焦点时,焦点事件按以下顺序发生:
Enter --> GotFocus --> LostFocus --> Leave --> Validating --> Validated
(三)除去 GotFocus 和 LostFocus 事件,任何情况下焦点事件按以下顺序发生:
Enter --> Leave --> Validating --> Validated
注意:
(1)GotFocus 和 LostFocus 事件是关联于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低级别焦点事件。
应对所有控件使用 Enter 和 Leave 事件。通常,GotFocus 和 LostFocus 事件仅在更新 UICues
或编写自定义控件时使用。
(2)如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。
(3)如果在 Validating 事件委托中,CancelEventArgs 的 Cancel 属性设置为 true,则正常情况下将
在 Validating 事件之后发生的所有事件均被取消。并且焦点不会离开该控件。
(4)Enter 和 Leave 事件被 Form 类取消。Form 类中的等效事件为 Activated 和 Deactivate 事件。
(5)Enter 和 Leave 事件是分层的,将沿父级链上下级联,直到到达相应的控件为止。例如,假定您
有一个带有两个 GroupBox 控件的 Form,每个 GroupBox 控件有一个 TextBox 控件。将插入符号从一
个 TextBox 移至另一个时,将对移出的 TextBox 和 GroupBox 引发 Leave 事件,而对移入的 GroupBox
和 TextBox 引发 Enter 事件。
(6)请勿尝试从 LostFocus 事件处理程序中设置焦点。这样操作可能导致应用程序或操作系统停止响应。