10

参考此 MSDN 页面(或有关此事的任何相关页面),它指出:

当您使用键盘更改焦点时,焦点事件按以下顺序发生:

  1. 进入
  2. 获得焦点
  3. 离开
  4. 证实
  5. 已验证
  6. 失去焦点

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

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

  1. 进入
  2. 获得焦点
  3. 失去焦点
  4. 离开
  5. 证实
  6. 已验证

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

4

2 回答 2

1

如上所述:

在 MSDN 文章中,您链接的措辞足够强大吗?永远不要使用 LostFocus,只有离开。

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

于 2014-09-04T20:01:14.417 回答
1

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

于 2014-11-26T18:04:20.067 回答