2009-05-06 7 views
3

Diese vermeintlich leichte Aufgabe hat mir Kopfschmerzen bereitet. Ich möchte einfach den Benutzer einen beliebigen Text eingeben lassen, der float.TryParse in einem Textboxish Steuerelement folgt.C# Eingabeüberprüfung für eine Textbox: float

Ich konnte ein normales TextBox verwenden und den Text in einigen btnOK_Click überprüfen, aber das ist offensichtlich lahm. Es gibt auch ein nettes eingebautes MaskedTextBox-Steuerelement, aber ich konnte die Maske nicht auf float.TryParse setzen. Außerdem scheint es nur dann auf Gültigkeit zu prüfen, wenn eine Fokusänderung auftritt.

Graben um auf dem Netz brachte einige interessante Ideen, aber keiner von ihnen so schön wie ich möchte.

Wie haben Sie dieses Problem gelöst? Habe ich einfach eine naheliegende Lösung vermisst oder muss ich diese Funktionalität selbst implementieren?

Ich bin mir dessen bewusst ein paar ähnliche Themen auf SO, aber es gab keine realisierbare Lösung gefunden werden.

Update: Ja, WinForms.

Antwort

6

bearbeiten

Nun, das macht es viel einfacher ... Fügen Sie einfach einen Validating Event-Handler zu Ihrem Textbox und die TryParse im Code hinter tun. Wenn es ungültig ist, wird der Benutzer als solcher aufgefordert.

Validieren wird ausgelöst, wenn der Benutzer die Eingabe beendet ist und sich von der TextBox Fokus also, wenn Sie im laufenden Überprüfung tun müssen, können Sie den Textchanged behandeln oder auf der KeyPress/KeyUp Ereignishandler statt

Original

Ist das in asp.net oder WinForms/WPF

Wenn seine asp.net Sie eine Kombination aus RegularExpressionValidator (zur Berücksichtigung von Komma trennung, 1 Nachkommastelle, etc ...) verwenden könnte und a RangeValidator zum Einstellen der Min/Max-Werte f oder ein Schwimmer.

Abgesehen davon, dass der einzige Weg, es zu gewährleisten, würde die Textbox in einem Update legen können, hält eine CustomServerValidator auf, und in der Server-Prüf-Funktion, ein TryParse auf dem TextBox.Text Wert zu tun, wenn es gelingt, IST VALID, wenn es fehlschlägt, UNGÜLTIG

4

Vorsicht Validating Verwendung und Validierung auf false gesetzt. Sie können feststellen, dass Sie den Fokus nicht aus der Textbox entfernen können, wenn Sie keine gültigen Daten eingeben.

Ich löse dies, indem ich einfach eine TryParse() on LostFocus ausprobiere und wenn der TryParse fehlschlägt, färbe ich den Textbox-Hintergrund einen rötlichen Farbton, um es offensichtlich zu machen, dass etwas falsch ist.

+1

In meiner endgültigen Lösung bin ich den letzten gültigen Wert zwischenspeichern und, falls erforderlich, den Text zurückgesetzt, wenn der Fokus verloren geht. – mafu

+2

Ihre Idee, die Farbe zu ändern, war nett. In meiner Lösung macht das sofortige Färben von ungültigen Werten für den Benutzer deutlich, dass er den Wert ändern sollte. – mafu

+0

Ich habe TryParse() in TextChanged gesetzt und Hintergrundfarbe des Textfelds auf rot gesetzt, wenn TryParse fehlschlägt und Hintergrundfarbe auf Color.Empty zurücksetzen, wenn TryParse besteht. Dies gibt sofortiges Feedback zurück, wenn der Benutzer tippt. – CleanCoder