using System.Globalization;
// nur Eingabe von führendem Minus, Zahlen, ein Dezimaltrennzeichen und Backspace in der Textbox zulassen
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (sender is TextBox)
{
TextBox tb = sender as TextBox;
// Merker für Bedingungen
bool bOk = true;
// wenn das Eingabezeichen ein kulturunabhängiges Dezimaltrennzeichen ist
if (e.KeyChar.ToString() == NumberFormatInfo.InvariantInfo.NumberDecimalSeparator)
{
// überprüfen, ob in der Textbox schon ein Dezimaltrennzeichen steht,
// um Doppelungen zu vermeiden
bOk = (tb.Text.IndexOf(NumberFormatInfo.InvariantInfo.NumberDecimalSeparator) < 0);
}
// wenn das Eingabezeichen ein führendes Minus ist
if (e.KeyChar.ToString() == NumberFormatInfo.InvariantInfo.NegativeSign)
{
// überprüfen, ob in der Textbox schon ein führendes Minus steht,
// um Doppelungen zu vermeiden
bOk = ((tb.SelectionStart == 0) && (tb.Text.IndexOf(NumberFormatInfo.InvariantInfo.NegativeSign) < 0));
}
if (bOk)
{
// Liste mit erlaubten Zeichen, in diesem Fall
// führendes Minus, Zahlen, Dezimaltrennzeichen, Backspace
string sChars = NumberFormatInfo.InvariantInfo.NegativeSign + "0123456789" + NumberFormatInfo.InvariantInfo.NumberDecimalSeparator + "\b";
// testen, ob das Zeichen erlaubt ist (in der Liste vorhanden ist)
e.Handled = (sChars.IndexOf(e.KeyChar) < 0);
}
else
{
// sonst Eingabezeichen verwerfen
e.Handled = true;
}
}
}