2009-05-06 29 views
3

這個應該很容易的任務給了我一些頭痛。我只是想讓用戶輸入任何成功輸入float.TryParse的文本到Textboxish控件中。C#輸入驗證的文本框:浮動

我可以使用一個正常的文本框,並檢查一些btnOK_Click文本,但這顯然是跛腳。此外,還有一個很好的內置MaskedTextBox控件,但是我沒有將其掩碼設置爲等於float.TryParse。而且,它似乎只在焦點更改發生時才檢查有效性。

在網上搜索帶來了一些有趣的想法,但沒有一個像我想的那麼好。

你是如何解決這個問題的?我是否錯過了一個明顯的解決方案,還是我必須自己實現這個功能?

我知道幾個類似的線程在SO上,但沒有找到可行的解決方案。

更新:是的,WinForms。

回答

6

編輯

嗯,這使得它容易得多......只需添加一個Validating事件處理程序到你的文本框 做在代碼中TryParse後面。如果它無效,提示用戶等。

驗證將火當用戶完成打字和移動焦點從文本框,所以如果你需要在飛行檢查這樣做,你可以處理框TextChanged或在鍵按壓/ KeyUp事件處理程序,而不是

這是在asp.net或的WinForms/WPF

如果它asp.net,你可以使用的RegularExpressionValidator組合(以佔逗號分離 - ,小數點後1位,等...),並一個RangeValidator來設置最小/最大值f或浮動。

除此之外,爲了保證這將是包裝的文本框在一個UpdatePanel,堅持就可以了CustomServerValidator,並在服務器驗證功能,在TextBox.Text值做TryParse,如果成功的唯一方法是有效,如果失敗,無效

4

請小心使用Validating並驗證爲false。您可能會發現,除非輸入有效數據,否則無法將焦點從文本框移開,這是一個非常大的可用性問題。

我通過簡單地嘗試TryParse()LostFocus解決這個問題,如果TryParse失敗,我給文本框背景添加一個紅色的顏色,使其明顯有些錯誤。

+1

在我的最終解決方案中,我緩存最後一個有效值,如果需要,重置文本,如果焦點丟失。 – mafu 2009-06-25 12:00:19