为什么LostFocus事件会在不同时间被调用?

时间:2014-04-15 20:01:53

标签: c# winforms events lost-focus

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

  

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

     
      
  1. 输入
  2.   
  3. 的GotFocus
  4.   
  5. 保留
  6.   
  7. 验证
  8.   
  9. 验证
  10.   
  11. 引发LostFocus
  12.   

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

  

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

     
      
  1. 输入
  2.   
  3. 的GotFocus
  4.   
  5. 引发LostFocus
  6.   
  7. 保留
  8.   
  9. 验证
  10.   
  11. 验证
  12.   

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

2 个答案:

答案 0 :(得分:1)

如上所述:

  

在MSDN文章中你链接的措辞足够强大?永远不要使用LostFocus,只留下。

     

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

答案 1 :(得分:1)

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