Forum: PC-Programmierung c# Im Textbox nur ein Komma zulassen


von Alex (Gast)


Lesenswert?

Hallo, Anwender soll eine Zahl mit einem Komma eingeben. Wenn er 
versehentlich zwei Kommas eingibt, dann kommt es zum Fehler in 
Compiler.Und zwar wenn String in float float vOut = 
Convert.ToSingle(vIn); umgewandelt wird.
 Wie kann man es in C# verhindern? Es soll nur ein Komma zugelassen 
werden.

von John (Gast)


Lesenswert?

Die Frage ist ob du mit WinForms oder WPF arbeitest?

Eine Möglichkeit wäre es die Eingabe zu überprüfen, bevor sie in ein 
float umgewandelt wird.

Im Fall von WinForms könnte dir eine MaskedTextBox helfen: 
http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox(v=vs.100).aspx

Für MaskedTextBox in WPF kannst du hier fündig werden: 
http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf

MfG,
John

von Mike M. (mikeii)


Lesenswert?

Mach ein Keydown Event, in dem jeweils geprüft wird, ob der String in 
der Textbox schon ein Komma beinhaltet. Wenn ja, dann soll das gefressen 
werden. Weiß den Befehl under C# grad nicht, aber ich denke mal wie in 
Java mit Consume?

von Mike M. (mikeii)


Lesenswert?

1
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
2
        {       
3
           
4
                if (textBox1.Text.Contains(',') && e.KeyChar == ',')
5
                    e.Handled = true;              
6
7
        }

von der mechatroniker (Gast)


Lesenswert?

KeyPress ist lückenhaft, denn entweder müsstest du Ctrl+V ebenfalls 
abfangen, wofür du verflucht werden wirst, oder man kann durch Pasten 
trotzdem etwas einfügen, was sich nicht in ein Float konvertieren lässt.

Wäre also nur zusätzlich zur Prüfung beim Bestätigen des Dialogs 
sinnvoll. Das wiederum geht am einfachsten, wenn du ein try/catch um die 
Wandlung schreibst und einfach eine sinnvolle Fehlermeldung ausgibst.

von Philip Z. (zudy)


Lesenswert?

Hallo!

Also wir haben das damals in der Schule immer mit dem Validating-Event 
gemacht.

Vielleicht ist das ja intressant fuer dich..

lg

von Markus V. (Gast)


Lesenswert?

der mechatroniker schrieb:
> Das wiederum geht am einfachsten, wenn du ein try/catch um die
> Wandlung schreibst und einfach eine sinnvolle Fehlermeldung ausgibst.

Am einfachsten ist float.TryParse OHNE Exception-Handler.

Gruß
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.