河南鄭州企業網站建設網絡公司多爾福科技
服務熱線:0371-60999820
15238075082
C# TextBox中的Validating與Validated事件
validating事件發生的時候,值還沒有被真正存入,所以是空的,而validated事件發生的時候,值已經存入,所以能取出;一個相當于值的前因,一個相當于值的后果。也就是說,可以用validating事件在值存入之前檢驗某個先決條件,如果不滿足,那么取消之前的操作,用e.cancel;如果要檢驗值本身的合法性,那么就用validated事件在值存入之后得到該字段的值。這也是為什么validated事件的e參數沒有cancel的原因,因為這個時候值已經存入,動作已經完成,無法取消。

另外還有一點,不管是validating還是validated,事件發生的時候控件都沒有失去焦點,所以才能談得上對該控件進行操作。控件的事件發生順序為Enter、GotFocus、Leave、Validating、Validated、LoseFocus,也就是說程序焦點先“進入”控件,然后控件“得到焦點”,然后焦點“離開”控件,這個時候焦點在控件內干的事情還沒有存入,于是“校驗”,然后存入,存入完了發生“校驗完”事件,善后處理完畢后控件就“失去焦點”。

 

您可能經常需要檢查用戶輸入到 Windows 窗體中的信息是否有效。例如,如果您有一個電話號碼的 TextBox 控件,則可以檢查該控件是否只包含適當的字符(數字、括號和連字符等等)。通常,可使用正則表達式驗證用戶輸入的數據。

了解Validating之前,我們還需要了解焦點事件的順序:

焦點事件按下列順序發生:

Enter  //進入控件時發生
GotFocus   //在控件接收焦點時發生
Leave   //輸入焦點離開控件時發生
Validating   //控件數據效驗時發生
Validated  //數據效驗完成后發生
LostFocus  //失去焦點時發生
如果 CausesValidation 屬性設置為 false,則將取消 Validating 和 Validated 事件。

注:GotFocus 和 LostFocus 事件是關聯于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低級別焦點事件。應對所有控件使用 Enter 和 Leave 事件。

如果在 Validating 事件委托中,CancelEventArgs 對象的 Cancel 屬性設置為 true,則正常情況下將在 Validating 事件之后發生的所有事件均被取消。

在操作中驗證

要驗證控件的內容,可以編寫代碼來處理 Validating 事件。在事件處理程序中,測試特定的條件(例如上面的電話號碼)。驗證是在處理時發生的一系列事件之一。

如果測試失敗,則 Validating 事件的 CancelEventArgs 的 Cancel 屬性將設置為 True。這將取消 Validating 事件,并導致焦點返回到控件(juky_huang注:這樣會出現一個死循環,除非數據效驗通過,可以使用下面強制方法來關閉)。實際的結果是,除非數據有效,否則用戶將無法退出該控件。

關閉窗體和重寫驗證

當數據無效時,維護焦點的控件的副作用是,使用關閉窗體的任何常規方法都將無法關閉父窗體:

單擊“關閉”框
通過右擊標題欄顯示的“系統”菜單
以編程方式調用 Close 方法
不過,在某些情況下,無論控件中的值是否有效,您都希望用戶可以關閉窗體。您可以重寫驗證,并通過創建窗體的 Closing 事件的處理程序來關閉仍包含無效數據的窗體。在該事件中,將 Cancel 屬性設置為 False。這將強制關閉該窗體。

注意  如果使用此方法強制關閉窗體,控件中尚未保存的任何信息都將丟失。

注意  模式窗體在關閉時不會驗證控件內容。您仍可以使用控件驗證將焦點鎖定到控件,但不必考慮關閉窗體的行為。
上一篇: this.dataGridView1.CurrentRow.Cells[0].Value什么意思 下一篇: textbox文本框失去焦點事件、獲得焦點事件
網站首頁 | 關于我們 | 版權所有 | 網站地圖 | 服務項目 | 網站建設 | 網站優化 | 軟件開發 | 經典案例 | 常見問題 | 聯系我們
版權所有:河南多爾福電子科技有限公司 豫ICP17014991號-2 技術支持:多爾福科技
地址:河南省鄭州市鄭東新區東風南路萬通街英地金臺府邸4號樓2單元1204室。 手機:15238075082 Email:[email protected]
大乐透胆拖中奖规则图