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

这可能是一个基本的问题,但我不得不承认,我从来没有真正明白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

捕获键盘或鼠标input还是其他的区别?

GotFocus / LostFocus事件分别由Windows消息WM_SETFOCUS和WM_KILLFOCUS生成。 他们有点麻烦,尤其是WM_KILLFOCUS容易出现死锁。 处理验证逻辑的Windows窗体中的逻辑(例如验证事件)可以覆盖焦点更改。 换句话说,焦点实际上改变了,但是验证代码将其移回。 您的用户界面的逻辑状态是,它从来没有移动,你不应该知道它的确。

Enter / Leave事件避免了这些低级焦点更改通知事件可能导致的麻烦,它们在Winforms建立真正的焦点时生成。 你几乎总是想要使用这些。

当控件第一次获得焦点时,会发生Control.Enter事件。 而Control.GotFocus发生每一次控件获得焦点。 例如,你有'textBox1'已经有焦点,你调用textBox1.Focus(),GotFocus事件总是会在这个实例中触发,不像Enter事件,只有当一个控件没有焦点时才会触发并第一次收到它。