关于.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事件就不会发生了
关于.Net WinForm 中的控件失去焦点时触发事件的问题
最新推荐文章于 2023-10-18 10:40:29 发布