[C#] In TextBox nur Zahlen zulassen mit DataBinding

Drucken
( 6 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 19.12.2011 Zuletzt aktualisiert am 02.02.2012 Geschrieben von Jonny132
Oftmals wird mit aufwendigen Abfragen und vielen Zeilen Code versucht den Benutzer davon abzuhalten unerwünschte Änderungen in einer TextBox zu tätigen. Zum Beispiel wollen wir, dass der Benutzer nur Zahlen eingeben darf. Man könnte auch das NumericUpDown Control verwenden, jedoch bietet das oft nicht die gleichen Möglichkeiten wie eine TextBox. Dabei ist einiges zu Beachten. zB sind nur die Zeichen 1-9 erlaubt. Dann je nach Ländereinstellung ein '.' oder ein ','. Dann muss man darauf achten, dass auch wirklich nur EIN Komma eingegeben wurde usw...

Das alles können wir uns dank DataBinding sparen. Wie zeige ich euch anhand eines Beispieles. Erstellt dazu eine Windows - Forms Anwendung und zieht eine TextBox auf die Form.

Form Load Ereignis

 private void Form1_Load(object sender, EventArgs e)
 {
   BindingSource source = new BindingSource(new decimal(), "");
   source.BindingComplete += new BindingCompleteEventHandler(
                                        source_BindingComplete);
   textBox1.DataBindings.Add("Text", source,"", true,
                             DataSourceUpdateMode.OnValidation);
 }

 

Zuerst erstellen wir eine BindingSource der wir als DataSource im Konstruktor einen Dezimalwert geben.
Desweiteren Abbonieren wir das BindinComplete Ereignis. Dieses wird immer aufgerufen wenn ein neuer Wert gebunden wird.
Zu Schluss fügen wir die BindingSource noch der TextBox hinzu. Wir geben an, dass die Text - Eigenschaft der TextBox gebunden werden soll und dass die DataSource upgedatet werden soll, wenn die Eingeben Validiert werden. Dies ist dann auch der Zeitpunkt an dem das BindingComplete Event geworfen wird. 

BindingComplete Ereignis

 void source_BindingComplete(object sender, BindingCompleteEventArgs e)
 {
   if (e.BindingCompleteState != BindingCompleteState.Success)
   {
      MessageBox.Show(e.ErrorText);
   }
 }
Nun überprüfen wir ob die Validierung korrekt abgelaufen ist (also wenn der Benutzer eine gültige Zahl eingegeben hat), ansonsten Zeigen wir nur noch eine MessageBox mit dem Error.

Und das wars schon. Kein komplizierter Code und keine massenhaften Überprüfungen. Startet das Projekt und probiert es aus.
(Da das OnValidation geworfen wird wenn die TextBox verlassen wird (bzw den Focus verliert), könnt ihr euch zu Testzwecken noch eine weitere Textbox auf die Form ziehen oder ihr versucht die Anwendung zu schliessen, wenn ein Fehlerhafter Wert in der TextBox ist.
 Textbox in der nur Zahlen eingegeben werden können

    Veröffentlichen Sie ihre Kommentare ...