2010-04-23 112 views

回答

18

GotFocus/LostFocus事件分別由Windows消息WM_SETFOCUS和WM_KILLFOCUS生成。它們有點麻煩,尤其是WM_KILLFOCUS容易出現死鎖。處理驗證邏輯的Windows窗體中的邏輯(例如驗證事件)可以覆蓋焦點更改。換句話說,焦點實際上發生了變化,但驗證代碼將其移回。您的用戶界面的邏輯狀態是它從不移動,您不應該意識到它的確如此。

Enter/Leave事件避免了這些低級別焦點更改通知事件可能導致的麻煩,它們在Winforms建立真正焦點時生成。你幾乎總是想要使用這些。

3

Control.Enter事件發生在控件第一次獲得焦點時。雖然Control.GotFocus發生每一次控件獲得焦點。例如,您有'textBox1'已經有焦點並且您調用textBox1.Focus(),GotFocus事件將始終在此實例中觸發,與Enter事件不同,它只會在控件尚未擁有焦點時觸發並第一次收到它。