关于this MSDN page(或关于此事的任何相关页面),它指出:
使用键盘更改焦点时,会发生焦点事件 以下顺序:
- 输入
- 的GotFocus
- 保留
- 验证
- 验证
- 的引发LostFocus
醇>
但是,当您使用鼠标来引发事件时,订单会更改!
使用鼠标或通过调用Focus方法更改焦点时,焦点事件按以下顺序发生:
- 输入
- 的GotFocus
- 的引发LostFocus
- 保留
- 验证
- 验证
醇>
这不会使事件链完全不同吗?我的解释是键盘链确保一切正常,然后引发LostFocus
事件。然而,鼠标事件似乎在出于某种原因进行验证之前提高了它。那是为什么?
答案 0 :(得分:1)
如上所述:
在MSDN文章中你链接的措辞足够强大?永远不要使用LostFocus,只留下。
键盘导航必须按此顺序才能应用验证。这些是为了对它们作出反应以验证任何输入字符串。
答案 1 :(得分:1)
我能想到的最好的例子是验证中的e.Cancel方面。使用键盘进行导航通常是控制导航类型(包括子控件和父控件)的控件。使用鼠标进行表单导航并不总是导致选择控件。例如,关闭表单或只是在控件外部单击(即重新定位表单)。在控件外部发生鼠标单击时,并不总是希望进行验证。希望有所帮助。