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.
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
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
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