Control.Enter和Control.GotFocus事件之间有什么区别?

时间:2010-04-23 21:22:05

标签: windows winforms user-interface events

这可能是一个基本问题,但我必须承认,我从未真正理解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

捕捉键盘或鼠标输入或别的东西之间有区别吗?

2 个答案:

答案 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事件只会在控件没有焦点时触发并且第一次收到它。