首先並不是每個事件的e參數都有上述兩個屬性。
e.Cancel:獲取或設置指示是否應取消事件的值;e.Handled:獲取或設置一個值,該值指示是否處理過此事件。
下面說說比較常見的場景:
1)e.cancel:
①窗口關閉,比如用戶點擊窗口右上角想關閉,但代碼里彈出確認框讓用戶確認是否真的想退出,如果用戶選擇了否,則e.cancel = true即可;
②DataGridview單元格的編輯,如果想排除某些列的編輯操作,只需在CellBeginEdit事件中,判斷如果當前單元格屬於要排除的列,e.Cancel = true即可,也就不會執行CellEndEdit事件了;
③讓TreeView控件指定節點的選中無效,如讓根節點的選中無效,只需在TreeView控件的BeforeSelect事件中判斷如果為根節點,e.Cancel = true即可,也就不會執行節點的NodeMouseClick事件了。
2)e.Handled:多用在過濾某些事件,比如鍵盤按鍵
①如要求文本框只能輸入數字,那么當輸入的是字母,則e.handled=true即可,無效化剛剛輸入的鍵值;
②DataGridView控件默認按下Delete鍵會刪除選中的行,如果想實現按下Delete鍵時彈出確認框是否刪除,點擊“是”才刪除數據庫中對應的數據,相應的也刪除DataGridview的選中行,點擊“否”不刪除數據庫中對應的數據,也不刪除DataGridview的選中行,只需在點擊“否”時,e.Handled = true即可。e.Handled = true很關鍵,沒有這句,點擊“否”時雖然能控制不刪除數據庫中的對應數據,但DataGridview中的選中行卻被刪除了。
