这可能是一个基本问题,但我必须承认,我从未真正理解Control.Enter和Control.GotFocus事件之间的区别是什么。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enter.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus.aspx
捕捉键盘或鼠标输入或别的东西之间有区别吗?
答案 0 :(得分:21)
GotFocus / LostFocus事件分别由Windows消息,WM_SETFOCUS和WM_KILLFOCUS生成。它们有点麻烦,尤其是容易出现死锁的WM_KILLFOCUS。 Windows窗体中处理验证逻辑的逻辑(例如,验证事件)可以覆盖焦点更改。换句话说,焦点实际上已经改变,但随后验证代码将其移回。您的UI的逻辑状态是它永远不会移动,您不应该知道它确实如此。
Enter / Leave事件避免了这些低级焦点更改通知事件可能导致的麻烦,它们是在Winforms建立真正焦点时生成的。你几乎总想用这些。
答案 1 :(得分:4)
Control.Enter事件在控件第一次获得焦点时发生。当控件获得焦点时,Control.GotFocus会发生。例如,你有'textBox1'已经有焦点,你调用textBox1.Focus(),GotFocus事件将始终在这个实例中触发,不像Enter事件只会在控件没有焦点时触发并且第一次收到它。