关于.Net WinForm 中的控件失去焦点时触发事件的问题

       MSDN上说是按照这个顺序来进行的 Leave--Validating--Validated--LostFocus(不特殊说明时CausesValidation为true)。可是在跟踪代码时发现顺序怎么是LostFocus--Leave--Validating--Validated呢?后来发现原来还和离开的方法有关系。当使用鼠标或直接设置焦点离开的时候顺序应当为LostFocus--Leave--Validating--Validated,而MSDN上说的那个顺序是以TAB键移动焦点时的顺序。仔细看了一下MSDN中好像并没有对此有明确的说明,而且LostFocus在视图设计器中都没有,只能通过代码来添加,是否是意味着这个事件不是很推荐使用呢?

离开方式

使用Tab键或set Focus

使用鼠标点击

触发顺序

Leave--Validating--Validated--LostFocus

LostFocus--Leave--Validating--Validated


     另外若将要移动到的下一个控件的CausesValidation为false时,则原控件的Validating和Validated事件并不会触发。它们将会发生在下一次焦点移动到CausesValidation为true的控件的GotFocus事件之前。而且若这个CausesValidation为true的控件为自身,也不会引发这两个事件,在MSDN中好像也没有非常明确的说明。

     A,C的CausesValidation为true,B的CausesValidation为false  用鼠标点击移动

移动顺序

A--B--C

A--B--A

触发顺序

A.LostFocus--A.Leave--B.GotFocus--B.LostFocus--B.Leave--A.Validating--A.Validated--C.GotFocus

A.LostFocus--A.Leave--B.GotFocus--B.LostFocus--B.Leave--A.GotFocus
    
     第一组中A的Validating和Validated事件发生在C的GotFoucus之前,而第二组中A的第一次Validating和Validated事件就不会发生了

你可能感兴趣的:(WinForm)