Beschränken Sie die in der Textbox zulässigen Zeichen (Eingabe von Geldbetrag)
Frage
Ich habe also ein subtotales Textfeld, in dem ein Betrag wie 546,75 US -Dollar eingegeben werden kann. Jetzt möchte ich sicherstellen, dass nur Zahlen, ein Dezimalesymbol und Commas nur alle 3 Plätze (100.000.000) zugelassen haben. Ist das möglich? Vielleicht nicht die Kommas, sondern zumindest die Zahlen, Dezimales und Dollarsymbol.
Lösung
Ich denke, Sie verwenden WinForms und nicht WPF. Wenn dies der Fall ist, können Sie System.Windows.Forms.ErrorProvider (Sie können eine von Toolbox in Ihr Formular ziehen) zusammen mit regulären Ausdrücken zur Validierung verwenden.
WARNUNG: Die Regex -Muster -Zeichenfolge unten kann nicht genau Sie möchten, sondern vermitteln hoffentlich die Idee.
Einige Match-Beispiele ... "$ 4.000.00", "-$ 4000.00", "-$ 400.00"
private void textBox1_Validating(object sender, CancelEventArgs e)
{
string error = null;
string pattern = @"^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$";
if (!Regex.IsMatch(textBox1.Text, pattern))
{
error = "Please enter a US currency value.";
e.Cancel = true;
}
errorProvider1.SetError((Control)sender, error);
}
Andere Tipps
Warum Sie das Geldzeichen nicht "$" von der Textbox auslegen (erstellen Sie ein Etikett, nur infrontof Textbox), dann müssen Sie sich keine Sorgen um diesen Charakter machen, sondern nur um Zahlen. Und es sieht besser aus (meiner Meinung nach). Dann können Sie diesen Code verwenden:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
{
e.Handled = !char.IsNumber(e.KeyChar);
}
}
Alle Validierung sollte manuell auf dem TastePress -Event durchgeführt werden.
Hier Beschriebene Validierung für numerische Werte. Sie müssen das Zeichen und die Dezimalstellen "$" zusätzlich überprüfen.
Es gibt eine Reihe von Artikeln zu numerischen Textboxen
http://www.daniweb.com/software-development/csharp/threads/95153
http://www.codeprroject.com/kb/vb/numerictextbox.aspx
Ich benutze dieses in meinen Projekten
http://www.codeprroject.com/kb/edit/validatingTextBoxControls.aspx
// tb - ist der Name des Textfelds
private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
char[] inputChar = e.Text.ToCharArray();
if (char.IsNumber(inputChar[0]))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
// eine andere Methode.
if (char.IsDigit(inputChar[0]))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
Haben Sie AJAX -Steuerelemente ausprobiert?
http://www.aspsnippets.com/articles/aspnet-ajax-FilteredTextBoxextender-control-example.aspx
Simples. :)