【ASP.NET C#】WinForm Focus Event 控制項 焦點事件觸發順序

寫 WinForm 的 Focus Event 常常要考慮到「鍵盤事件 (KeyBoard Evnet)」與「滑鼠事件 (Mouse Evnet)」,

這兩個事件都相同只是觸發順序不太相同

 

WinForm Focus Event

鍵盤事件 (KeyBoard Evnet)

觸發條件

  • 1. 使用鍵盤 (Tab、Shift Tab等)
  • 2. 使用 Select() 或 SelectNextControl() 方法
  • 3. ContainerControl.ActiveControl 屬性改變

焦點事件發生順序

  • 1. Enter: 發生於輸入控制項時。
  • 2. GotFocus: 此元素取得邏輯焦點時發生。
  • 3. Leave: 發生於輸入焦點離開控制項時。
  • 4. Validating: 正在驗證控制項時發生。
  • 5. Validated: 發生於控制項完成驗證時。
  • 6. LostFocus: 發生於控制項遺失焦點時。

 

WinForm Focus Event-1

滑鼠事件 (Mouse Evnet)

觸發條件

  • 1. 使用滑鼠點擊
  • 2. 使用 Focus() 方法

焦點事件發生順序

  • 1. Enter: 發生於輸入控制項時。
  • 2. GotFocus: 此元素取得邏輯焦點時發生。
  • 3. LostFocus: 發生於控制項遺失焦點時。
  • 4. Leave: 發生於輸入焦點離開控制項時。
  • 5. Validating: 正在驗證控制項時發生。
  • 6. Validated: 發生於控制項完成驗證時。

 

事件注意

  • 1. GotFocus 和 LostFocus 事件觸發條件都是接收Windows 底層訊息「WM_KILLFOCUS」與「WM_SETFOCUS」。
  • 2. 大多控制項都會使用 Enter 和 Leave 事件,較不會使用GotFocus 和 LostFocus 事件。
  • 3. 若是要撰寫自訂控制項時,才會使用到 GotFocus 和 LostFocus 事件。
  • 4. CausesValidation 屬性設定爲 False,Validating 和 Validated 事件會被取消。
  • 5. 若觸發 Validating 事件時,CancelEventArgs 的 Cancel 屬性設置爲 True, 一般情況 Validating 事件結束後,所有事件都會被取消,且焦點不會離開該控制項。
  • 6. Form 的 Activated和Deactivate事件,可中斷 控制項 Enter 和 Leave 事件。
  • 7. 盡量避免使用 LostFocus 事件處理焦點設定,使用 LostFocus  事件容易導致整個應用程序或操作系統停止回應。
  • 8. 更多細節可以參考MSDN。

 

參考文獻: http://tc.chinawin.net/it/softwaredev/article-2543a.html

留言

Top