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.

War es hilfreich?

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.

// 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;
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top