2009-05-06 12 views
3

これはおそらく簡単な作業で頭がおかしくなりました。私は単に、ユーザがfloat.TryParseの後に続くテキストをTextboxishコントロールに入力させたいだけです。C#テキストボックスの入力検証:float

私は通常のTextBoxを使用し、いくつかのbtnOK_ClickでTextをチェックすることができますが、これは明らかに不十分です。また、素晴らしい組み込みのMaskedTextBoxコントロールがありますが、マスクをfloat.TryParseと等しく設定していません。また、フォーカス変更が発生した場合にのみ、有効性をチェックするように見えます。

ネットで掘り下げてみると、興味深いアイデアがいくつか出てきましたが、どれも好きではありません。

この問題をどのように解決しましたか?わかりやすい解決策が見つからないか、この機能を自分で実装する必要がありますか?

私はSOのいくつかの類似スレッドを認識していますが、実現可能な解決策は見つかりませんでした。

更新:はい、WinForms。それはたくさん簡単に...ちょうどあなたのテキストボックス にValidatingイベントハンドラを追加し、背後にあるコードでTryParseを行います

答えて

6

編集

まあ。無効な場合は、そのようにユーザーにプロンプ​​トを出します。

の検証では、TextChangedを扱うか、代わりにKeyPressイベントのオン/ KeyUpイベントハンドラ

ことができ、ユーザーが入力を終了し、あなたはその場のチェックに行う必要があるので、もし動きがテキストボックスから焦点を当てされたときに発生しますオリジナル

はasp.netやリサイズに/そのasp.netもし

WPF、あなたは(...などコンマ別離、1つの小数点、を考慮して)RegularExpressionValidatorの組み合わせを使用することができ、このですし、 RangeValidatorを使用して、最小/最大値fまたはフロート。

それはさておき、それを保証する唯一の方法は、それが成功した場合、UpdatePanelの中​​にテキストボックスをラップすることにCustomServerValidatorを固執し、サーバ検証機能では、TextBox.Text値にTryParseを行うことであろう、IS VALID、失敗した場合は有効ではない

4

注意してValidatingを使用し、偽になることを確認してください。有効なデータを入力しない限り、テキストボックスからフォーカスを移動することはできません。これは本当に大きなユーザビリティの痛みです。

TryParse()LostFocusに設定するだけで解決できます。また、TryParseが失敗した場合は、テキストボックスの背景に赤みを帯びて何かが間違っていることが明らかになります。

+1

私の最終的な解決策では、最後の有効な値をキャッシュしており、必要に応じて、フォーカスが失われた場合にテキストをリセットします。 – mafu

+2

色を変えるあなたの考えは素晴らしかったです。私の解決策では、無効な値を直ちに塗りつぶすことで、値を変更する必要があることがユーザーに分かります。 – mafu

+0

私はTryParse()をTextChangedに置き、TryParseが失敗したときにテキストボックスの背景色を赤に設定し、TryParseが成功すると背景色をColor.Emptyにリセットしました。これにより、ユーザーの入力時に即座にフィードバックが得られます。 – CleanCoder