C# · 12月 30, 2021

c# – 为什么在不同的时间调用LostFocus事件?

关于 this MSDN page(或任何相关页面),它指出:

When you change the focus by using the keyboard,focus events occur in
the following order:

Enter GotFocus Leave Validating Validated LostFocus

但是,当您使用鼠标引发事件时,订单更改!

When you change the focus by using the mouse or by calling the Focus method,focus events occur in the following order:

Enter GotFocus LostFocus Leave Validating Validated

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

解决方法 我可以想到的最好的例子是验证中的e.Cancel方面.使用键盘进行导航通常是控制导航类型(包括子级和父级控件).使用鼠标进行表单导航并不总是导致选择控件.例如关闭表单或只需单击控件外(即重新定位表单).当控件外部发生鼠标点击时,并不总是希望进行验证.希望有帮助.