2011-03-29 69 views
2

概括地說,這個數據綁定工作正常數據綁定的WinForms文本框

tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue"); 

也就是說,當我輸入的值無效,像一個空字符串,那麼標籤出結核病,其中的值只是恢復到以前的值。這是有道理的,因爲輸入的值不會進入十進制類型的對象屬性。但不幸的是,這兩種數據綁定的:

tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue", true, DataSourceUpdateMode.OnPropertyChanged, 0, "C"); 
tbTotalTaxDue.DataBindings.Add("Text", I, "TotalTaxDue", true, DataSourceUpdateMode.OnValidation, 0, "C"); 

行爲不同,當用戶輸入一個空字符串,輸入不會讓用戶切換出該文本框。有沒有辦法讓數據綁定顯示爲貨幣,但只需取消任何無效的編輯?

回答

3

你有幾個選擇:

  1. 子類TextBox並重寫OnValidating事件。如果Text爲空,請在致電MyBase.OnValidating()之前退出以禁止該事件。

  2. TextBox上設置CausesValidation = False,並處理TextChanged事件。如果Text不爲空,請手動驗證它。

我希望這有助於。

+0

它有很大的幫助。爲了我自己的啓發,你知道爲什麼在第一次驗證時這不是必需的嗎?沒有自定義顯示格式的那個? – 2011-03-29 19:23:35

+2

「Add()」的第四個參數是一個布爾值,它啓用格式化;你在後面的兩個調用中將它設置爲true。 'Binding.FormattingEnabled'的默認值是false,當設置爲true時,它將執行類型檢查。由於空字符串不能轉換爲十進制值,因此不驗證。 – Rob 2011-03-29 19:35:06

+0

選擇2打破了綁定的格式,但選擇1完美地工作。謝謝! – 2011-03-29 19:37:31