對於桌面應用,歸類總結一下最常用的事件
一 鼠標移動事件
用戶行為:鼠標移入控件又移出控件

鼠標在控件外側,准備移入控件,無事件

移入控件邊界,接受到 MouseEnter 事件

移入之后,接收到 MouseMove 事件,事件不停的發送,一旦cursor變換,發送 MouseHover 事件

鼠標在控件內部移動,不停的發送 MouseMove 事件

鼠標移出到控件邊界,發送 MouseLeave 事件

移出后無事件
二 鼠標點擊事件
用戶行為:在控件內部,點擊一下

在控件內部按下鼠標左鍵,MouseDown 事件

在控件內部任意位置,松開鼠標左鍵,先發 Click 再發 MosueClick 事件,然后發 MouseUp 事件

在控件外部位置,松開鼠標左鍵,只有 MouseUp 事件
PS:在同一位置,雙擊鼠標:
第一次點擊:MouseDown -> Click -> MouseClick -> MouseUp
第二次點擊:MouseDown -> DoubleClick -> MouseDoubleClick -> MouseUp
三 鍵盤事件
用戶行為:在控件內部,按下鍵盤上的某個鍵,然后又松開


在鍵盤上按下A,不松開,事件順序 KeyDown -> KeyPress -> KeyDown -> KeyPress ... 如此循環下去
松開鍵盤上的A,發 KeyUp 事件
按下 Ctrl + A, 會有兩輪事件:
KeyDown(Ctrl) -> KeyDown(A) -> KeyPress -> KeyUp(A) -> KeyUp(Ctrl)
四 焦點事件

點擊文本框,光標開始在文本框內不停的閃爍,觸發一次 GotFocus 事件
在下面的任務欄上,點擊應用程序圖標,導致整個程序最小化 LostFocus,再點擊一次圖標,又顯示出程序, GotFocus
點擊其他應用程序 LostFocus,再顯示 GotFocus
五 拖拽事件

前提:TextBox AllowDrop 屬性需要設置成 true
把一個文件拖拽進入控件時,發生如下順序
剛拖入控件內部, DragEnter (這時候可以設置Cursor,方法是 e.Effect = DragDropEffects.Move;)
在控件內部移動,DragMove
最終再控件內部松開,DragDrop,在外部松開 DragLeave
六 校驗事件

點擊控件,控件得焦點,Enter -> GotFocus
此后最小化再顯示,點擊其他應用程序再點回來,只會觸發 LostFocus -> Focus
但是點擊當前應用上其他控件時,該控件,LostFocus -> Leave -> Validating -> Validated
注意,點擊的其他控件如果設置了 CausesValidation = false; 就不會觸發 Validating 和 Validated
Validating:
校驗開始之前,一般放校驗邏輯,可以設置 e.Cancel = false,使得
1.控件不能失去焦點,等待用戶更正了值,再次嘗試失去焦點,再次執行邏輯。
這個行為可以設置父容器的 this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange
2. 這個時候默認不能關閉窗體,如果修改這個默認行為,需要這么做:
掛窗體 FormClosing 事件,加 e.Cancel = false;
也不一定要 e.Cancel = false, 只是做一些UI上的提示,但是Winform會認為數據正確,並在數據綁定下,將值更新到數據庫里。
Validated:
校驗開始之后,一般放校驗通過后的UI處理。
