Textbox für numerischen Inhalt
Machmal kann es durchaus sinnvoll sein, bestimmte Benutzereingaben gar nicht erst zu zulassen. Will man zum Beispiel mit dem Inhalt verschiedenen Textboxen Berechnungen durchzuführen so ist es müßig, zu prüfen ob der Inhalt jeder Textbox tatsächlicher eine Zahl ist.
Glücklicherweise haben Textboxen Ereignisse, die es uns erlauben, einen eingegeben Wert zu überprüfen, bevor er in der Textbox erscheint. Das für uns wichtige Ereignis ist „KeyPress“ und es wird jedes Mal ausgeführt, wenn ein Zeichen in die Textbox eingegeben wird, oder genauer gesagt, wenn eine Taste gedrückt wird. Es gibt schließlich auch Tasten die keine Zeichen schreiben.
Will man auf das KeyPress-Ereignis reagieren sieht die Methode dafür so aus:
private void
textBox1_KeyPress(object sender, KeyPressEventArgs
e)
{
}
{
}
Während “sender“ für
uns uninteressant ist enthält “e“ die gedrückte
Taste. In der Vergangenheit wäre man jetzt
sicherlich hingegangen und hätte mit dem ASCII-Wert
der gedrückten Taste verschiedenen Vergleiche
durchgeführt. Inzwischen ist es aber etwas
einfacher geworden.
Überlegen wir aber zuerst was wir genau möchten: Wir wollen Zahlen eingeben können, aber natürlich müssen auch Tasten wie „Backspace“ oder die Cursortasten noch funktionieren. Es kann ja passieren das der Benutzer sich vertippt und seine Eingabe korrigieren will.
Das Resultat ist überraschend einfach :
Überlegen wir aber zuerst was wir genau möchten: Wir wollen Zahlen eingeben können, aber natürlich müssen auch Tasten wie „Backspace“ oder die Cursortasten noch funktionieren. Es kann ja passieren das der Benutzer sich vertippt und seine Eingabe korrigieren will.
Das Resultat ist überraschend einfach :
private void
textBox1_KeyPress(object sender, KeyPressEventArgs
e)
{
if (!char.IsDigit(e.KeyChar ) && !char.IsControl(e.KeyChar))
e.Handled = true;
}
{
if (!char.IsDigit(e.KeyChar ) && !char.IsControl(e.KeyChar))
e.Handled = true;
}
Ist der “KeyChar“ von
“e“ kein Digit (Zahl) und auch kein Control
(Cursortaste) dann soll “Handled = true“ sein. Die
Eigenschaft “Handled“ gibt, wörtlich übersetzt, an,
ob dieser Tastendruck schon behandelt wurde, also
in die Textbox geschrieben wurde. Setzen wir diese
Eigenschaft manuell verhindern wir, das unsere
Eingabe in der Textbox erscheint.
Hat man ein Formular mit sehr vielen Textboxen für ausschließlich numerische Eingaben, ist es natürlich nicht besonders elegant für jede dieser Textboxen das „KeyPress“-Ereignis abzufangen. In diesem Fall empfiehlt sich eine eigene Klasse für diese Art von Textbox. Solch eine Klasse ist problemlos von Basisklasse ableitbar. Wir müssen nur eine einzige Methode überschreiben:
Hat man ein Formular mit sehr vielen Textboxen für ausschließlich numerische Eingaben, ist es natürlich nicht besonders elegant für jede dieser Textboxen das „KeyPress“-Ereignis abzufangen. In diesem Fall empfiehlt sich eine eigene Klasse für diese Art von Textbox. Solch eine Klasse ist problemlos von Basisklasse ableitbar. Wir müssen nur eine einzige Methode überschreiben:
public
class NumTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
e.Handled = true;
base.OnKeyPress(e);
}
}
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
e.Handled = true;
base.OnKeyPress(e);
}
}