Fragensteller
Problem mit eingeben von Daten in TextBox

Frage
-
Hallo!
Ich habe erst angefangen mit Visual c# zu beschäftigen. Ich bringe es nicht auf die Reihe Zahlen in die TextBox einzugeben welche folgende Kriterien erfüllen sollten: Nur ganze integer Zahlen größer 1 sollten akzeptiert werden. Wenn ich jetzt aber zum Beispiel bei meiner Lösung 12 eingebe wird die eins gelöscht und nur 2 angezeigt. Sollte aber 12 akzeptieren da >1. Wer kann mir weiterhelfen? Vielen dank im voraus
lg cupressus
private void textBox1_TextChanged(object sender, EventArgs e) { int MaxMD = 0; try { MaxMD = Convert.ToInt32(textBox1.Text); } catch { textBox1.Text = ""; } if ( MaxMD < 2 ) textBox1.Text = ""; }
Alle Antworten
-
Hallo,
ich vermute, das es beim Eingeben passiert. Denn wenn du zunächst 1 eingibst, wird die Eingabe gelehrt, da 1<2 ist. Wenn du nun die 2 eingibst, wird diese einfach akzeptiert.Unter WinForms ist es darum besser das NumericUpDown Control zu verwenden. Dort kann der Benutzer nur Zahlen eingeben. Du kannst angeben wo das Minimum und das Maximum liegen und wie viele Dezimalstellen akzeptiert werden sollen.
Sonst solltest du das TextChanged-Event nur als "Ausfallsicherung" verwenden. Denn es gibt viele andere Events, in denen du so etwas besser verarbeiten kannst. Beispielsweise KeyDown/KeyPress. Was die Validierung der Größe angeht solltest du das nur beim verlust des Fokus prüfen (LostFocus o.ä.). Sonst könnte man keine Zahlen eingeben, die mit 1 beginnen.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo,
wie Tom schon sagte ist das TextChanged Event dafür nicht geeignet.
Welches Event oder welche Aktion (Button zum Speichern etc.) dazu am besten geeignet ist können wir nicht sagen, das ist abhängig von deinem Programm. Meistens wird beim verlassen eines Controls oder beim Speichern validiert.
Hier ein kleines Beispiel in dem das Leave Event genutzt wird....
Leave Handler
this.textBox1.Leave += new System.EventHandler(this.textBox1_Leave);
private void textBox1_Leave(object sender, EventArgs e) { int numberEntered; if (int.TryParse(textBox1.Text, out numberEntered)) { if (numberEntered < 1) { MessageBox.Show("You have to enter a number higher than 1"); textBox1.Text = ""; textBox1.Select(); } } else { MessageBox.Show("You need to enter an integer"); textBox1.Text = ""; textBox1.Select(); } }
Hat man eine Anwendung die solche Eingaben mehrmals überprüfen soll empfiehlt sich ein eigenes Control in Form einer MaskEdbox... da kann man auch festlegen pro Steuerelement bspw. nur Zahlen... Max Min Wert und Dezimal Stelle.
Gruß
Jens
- Bearbeitet Jens Gerber Mittwoch, 3. September 2014 22:12
-
Hallo,
- Was hat nicht funktioniert?
Bitte die genaue Fehlermeldung und die Stelle an der der Fehler auftrat bzw. eine exakte Problembeschreibung. - Hast du mal das NumericUpDown oder die MaskedTextBox probiert? Diese reichen wahrscheinlich für dein Vorhaben bestens aus. So würdest du dir viel Arbeit ersparen.
- Wie willst du denn nun die Daten validieren? (Beim Fokusverlust, beim Drücken eines Buttons, ...?)
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets - Was hat nicht funktioniert?