使用tab与鼠标 的触发焦点事件差异

不能用msgbox进行测试

当通过使用键盘(Tab、Shift+Tab 等)、通过调用 Select  SelectNextControl 方法或者通过将 ContainerControl.ActiveControl属性设置为当前窗体等方式更改焦点时,焦点事件按以下顺序发生:

  1. Enter

  2. GotFocus

  3. Leave

  4. Validating

  5. Validated

  6. LostFocus

当通过使用鼠标或调用 Focus 方法的方式更改焦点时,焦点事件按以下顺序发生:

  1. Enter

  2. GotFocus

  3. LostFocus

  4. Leave

  5. Validating

  6. Validated

如果 CausesValidation 属性设置为 false,则将取消 Validating  Validated 事件。

如果在 Validating 事件委托中,CancelEventArgs  Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。

 说明:

GotFocus  LostFocus 事件是关联于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低级别焦点事件。通常,GotFocus  LostFocus 事件仅在更新 UICues 或编写自定义控件时使用。而 Enter  Leave 事件应该用于除 Form 类(该类使用 Activated  Deactivate 事件)之外的所有控件。有关 GotFocus  LostFocus 事件的更多信息,请参见位于 http://msdn2.microsoft.com/zh-cn/library/default.aspx. 上的 MSDN Library 中“Platform SDK Documentation”(Platform SDK 文档)的“Keyboard Input Reference”(键盘输入参考)部分中的 WM_SETFOCUS  WM_KILLFOCUS 主题。

 警告:

请勿尝试从 LostFocus 事件处理程序中设置焦点。这样操作可能导致应用程序或操作系统停止响应。有关 LostFocus 事件的更多信息,请参见位于 http://msdn2.microsoft.com/zh-cn/library/default.aspx. 上的 MSDN Library 中“Platform SDK Documentation”(Platform SDK 文档)的“Keyboard Input Reference”(键盘输入参考)部分中的 WM_KILLFOCUS Message Deadlocks 主题。

原文地址:https://www.cnblogs.com/xiaoL/p/2024607.html