none
Comprobar numeros decimales RRS feed

  • Pregunta

  • Hola,

    Tengo unos mask textbox con unos campos decimales, y necesito que cuando ponga 1.25 en el textbox me lo cambie a +01.25.

    No se como puedo validar la parte entera y si no pone signo que ponga + y si pone -1.25 que ponga -01.25.

    Saludos.

    • Cambiado Enrique M. Montejo sábado, 3 de marzo de 2018 15:38 Pregunta relacionada con controles de Windows Forms.
    jueves, 1 de marzo de 2018 16:31

Todas las respuestas

  • Nunca he usado el MaskedTextBox pero tal vez lo pueda orientar.

    No encontré en Internet mención alguna de cómo personalizar la presentación del valor.  Parece que es automático el asunto.  No tengo todas las especificaciones de cómo sería una entrada válida en su caso, pero asumiré que es un valor positivo o negativo en el ámbito [-100, 100].

    Mi primer intento iría sobre el evento Validating.

    private void txtNum_Validating(object sender, CancelEventArgs e)
    {
        double valor;
        if (!double.TryParse(txtNum.Text, out valor))
        {
            //Si no es numérico, no hacemos nada.
            return;
        }
        double entero = Math.Truncate(valor);
        double dDecimales = Math.Log10(Math.Abs(entero));
        int decimales = Math.Truncate(dDecimales) + (Math.Abs(valor - entero) > 0 ? 1 : 0);
        if (decimales > 2)
        {
            //Tampoco hacemos nada.
            return;
        }
        //Ok, el número es válido.
        StringBuilder sb = new StringBuilder();
        //Aquí omito el negativo porque creo que el segundo Append lo provee automáticamente.
        sb.Append(valor >= 0 ? "+" : "")
            .Append(String.Format("{0:00.00}", valor));
        //Hay que experimentar a ver si esta línea de código funciona bien.
        //Podría resultar en un llamado a este evento infinitamente.
        //También hay que validar si el MaskedTextBox valida el valor adecuadamente.
        txtNum.Text = sb.ToString();
    }


    Jose R. MCP
    Code Samples

    martes, 13 de marzo de 2018 4:58
    Moderador