Pregunta

Así que tengo un cuadro de texto subtotal donde se puede ingresar una cantidad como $ 546.75. Ahora, quiero asegurarme de que solo los números, un decimal, un símbolo de un dólar y comas permitan solo cada 3 lugares (100,000,000). es posible? Tal vez no las comas, sino al menos los números, el decimal y el símbolo del dólar.

¿Fue útil?

Solución

Creo que estás usando WinForms y no WPF. Si ese es el caso, puede usar System.Windows.Forms.ErrorProvider (puede arrastrar uno desde la caja de herramientas a su formulario) junto con expresiones regulares para hacer la validación.

ADVERTENCIA: La cadena de patrón Regex a continuación puede no hacer exactamente que desee, pero con suerte transmite la idea.

Algunos ejemplos de partidos ... "$ 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);
    }

Otros consejos

Por qué no pone el lado de la señal de dinero "$" del cuadro de texto (cree una etiqueta just defrontOf Textbox), entonces no tendrá que preocuparse por este personaje, sino solo por los números. Y se ve mejor (en mi opinión). Entonces puede usar este código:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
        {
            e.Handled = !char.IsNumber(e.KeyChar);
        }
    }

Toda la validación debe realizarse manualmente en el evento KeyPress.

Aquí Validación descrita para valores numéricos valores. Deberá verificar el signo '$' y los decimales adicionalmente.

// tb - es el nombre del cuadro de texto

    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;
        }

// otro método.

        if (char.IsDigit(inputChar[0]))
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top