Textfeld nur Nummern zulassen

Xo-mate

Erfahrenes Mitglied
Also ich vermute mal, dass es dafür eine ganz einfache lösung gibt, aber ich komm einfach nicht drauf.
Es ist ein einfaches Textfeld, in dem nur 1 Zahl stehen soll. das mit der einen Zahl hab ich schon duch MaxLength geklöst, aber ich kann trotzdem noch Buchstaben reinschreiben, was das Programm wohl nicht verkraften würde.
 
Mir fallen spontan da jetzt 2 Möglichkeiten ein:

1. Du überprüfst, wenn der Focus die TextBox verlässt, ob man die Eingabe in eine Zahl konvertieren kann. Wenn nicht, dann wird der Focus wieder auf die TextBox gesetzt und der Benutzer muss etwas anderes eingeben.

2. Du überprüfst Bei einem dem Keypress Event der TextBox mithilfer der übergebenen Parameter, ob das eingegebene Zeichen eine Zahl ist.
Wenn dem nicht so ist, dann wird kein Text ausgegeben, wenn doch, wird eben die Zahl in die TextBox geschrieben.
 
Du kannst das KeyPress Event dazu verwenden (siehe Code)

Dann prüfst du ab, ob was anderes als ne Nummer oder ein Steuerzeichen eingegeben wird (weil die Löschtaste ja noch gehen soll)
und fängst mit e.Handled=true das Tastenevent ab, damit es nicht mehr das Steuerelement erreicht. Wenn man nun was anderes als eine Nummer oder ein Steuerzeichen eingibt passiert 'nichts'


Gruß,
Christian


private void TextBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) != true && Char.IsControl(e.KeyChar) != true)
e.Handled=true;
}
 
Hi!

Ich habe beim obigen code folgende Fehlermeldung erhalten:

D:\C#\TD2005novem\NeuePerson.cs(343): Die Methode 'TD2005novem.NeuePerson.txtWSID_KeyPress(object, System.Windows.Forms.KeyPressEventArgs)' stimmt nicht mit dem Delegat 'void System.EventHandler(object, System.EventArgs)' überein.

Hat jemand eine Ahnung was da nicht passt?

Danke
Michi
 
Hallo,

also ich würde beim Text-Changed-Event einfach überprüfen ob alle Zeichen Ziffern sind. Zeichen, die keine Ziffern sind werden einfach gelöscht. Das ist imho die einfachste und effektivste Lösung.

Gruß
Sir Raven
 
Sir_Raven hat gesagt.:
Hallo,

also ich würde beim Text-Changed-Event einfach überprüfen ob alle Zeichen Ziffern sind. Zeichen, die keine Ziffern sind werden einfach gelöscht. Das ist imho die einfachste und effektivste Lösung.

Gruß
Sir Raven
Das denke ich nicht. Die meiner Erfahrung nach optimale und gängigste Lösung ist wirklich das KeyPress-Ereignis. Es ist nicht besonders effektiv, wenn man bei jeder Textänderung den gesamten String durchsucht und überprüft ob es sich um eine Zahl handelt. Obwohl das natürlich auch eine Möglichkeit ist.
Das Problem mit der Fehlermeldung des Compilers sagt doch übrigens schon alles Wissenswerte aus, was man braucht, um den Fehler selbst zu korrigieren. Grundlegende Kenntnisse der C#-Programmierung vorausgesetzt.
 
Die Lösung von ChristianLattenkamp ist wohl die einzig gute und vollständige Lösung...

Danke!
 
Du musst beachten, dass wenn du nur das KeyPress-Event überprüfst, dann kann man immer noch mittels Copy-Paste-Tastenkombination nicht-numerische Zeichen einfügen. Ich würde also noch das TextChanged-Ereignis verwenden und darin nochmal überprüfen, ob der Text wirklich rein numerischer Natur ist.
 
Zurück