为什么在不同的时间调用LostFocus事件

本文关键字:调用 LostFocus 事件 时间 为什么 | 更新日期: 2023-09-27 17:58:33

参考此MSDN页面(或任何相关页面),声明:

使用键盘更改焦点时,会在中发生焦点事件以下顺序:

  1. 输入
  2. GotFocus
  3. 离开
  4. 正在验证
  5. 已验证
  6. 失去焦点

但是,当您使用鼠标引发事件时,顺序会发生变化!

使用鼠标或调用focus方法更改焦点时,焦点事件按以下顺序发生:

  1. 输入
  2. GotFocus
  3. 失去焦点
  4. 离开
  5. 正在验证
  6. 已验证

这难道不会使一连串的事件完全不同吗?我在这里的解释是,键盘链确保一切正常,然后引发LostFocus事件。然而,由于某种原因,鼠标事件似乎在验证之前就引发了它。为什么?

为什么在不同的时间调用LostFocus事件

如上所述:

在你链接的MSDN文章中,措辞是否足够强硬?永远不要使用LostFocus,只使用Leave。

键盘导航必须按此顺序才能应用验证。它们旨在对它们作出反应,以便验证任何输入字符串。

我能想到的最好的例子是验证中的e.Cancel方面。使用键盘进行导航通常是控制导航类型的控件(包括子控件和父控件)。使用鼠标进行表单导航并不总是导致选择控件。例如,关闭窗体或简单地在控件外单击(即重新定位窗体)。当鼠标点击发生在控件之外时,并不总是希望进行验证。希望能有所帮助。