locked
Validar MaskedTextBox para que acepte un valor entre 1.0 y 5.0 RRS feed

  • Pregunta

  • Buena noche, solicito de su valiosa colaboración, como hago en C#, para validar en un MaskedTextBox, para que solo me acepte valores entre 1.0 y 5.0, solo eso valores es decir un digito entre 1 y 5, el separador decimal el cual este amarrado al sistema (. (punto) o , (coma)) y un digito entre (0 y 9)

    De antemano muchas gracias por su valiosa colaboración, programo en C# en visual studio communty 2019, tambien podria ser la implementación para un textbox.


    • Editado VISANCOR74 viernes, 10 de abril de 2020 0:43
    viernes, 10 de abril de 2020 0:25

Respuestas

  • Hola VISANCOR

    Tenes que validarlo después del o DURANTE el tipeo en el TextBox. Me imagino que es mientras escribis en el TextBox.

    Habría que controlar el evento KeyPress ... ahora lo hago y te lo paso.

    using System;
    using System.Windows.Forms;
    
    namespace WinFormsAppTextBoxValidation
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)8)
                {
                    e.Handled = false;
                    return;
                }
                else if (textBox1.Text.Length >= 3)
                    e.Handled = true;
    
                if ((textBox1.Text.Length == 0 || textBox1.Text.Length >= 3) && e.KeyChar == '0')
                    e.Handled = true;
                else if (textBox1.Text.Length == 0 && e.KeyChar > '0' && e.KeyChar < '6')
                    e.Handled = false;
                else if (textBox1.Text.Length == 1 && e.KeyChar == '.')
                    e.Handled = false;
                else if (textBox1.Text.Length == 2 && (Char.IsDigit(e.KeyChar) && textBox1.Text[0] < '5') || e.KeyChar == '0')
                    e.Handled = false;
                else if (textBox1.Text.Length >= 3)
                    e.Handled = true;
                else
                    e.Handled = true;
                textBox1.SelectionStart = textBox1.Text.Length;
            }
        }
    }

    Espero que resuelva tu problema.

    Saludos

    Pablo

    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 2:38
    viernes, 10 de abril de 2020 2:28
  • Le asignas el mismo método controlador de evento a todos los textBox que se necesite. Si vas a las Propiedades de cualquier TextBox, a la Pestaña Eventos (la del rayo), allí podes elegir el mismo método para todos. Pero mira que van a ser los mismos límites, 1.0 y 5.0, si queres cambiar algún límite en otro TextBox tenes que hacer otro método.
    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 3:22
    viernes, 10 de abril de 2020 2:45
  • Gracias ya lo solucione con el siguiente código:

    private void ValidarNotas(object sender, KeyPressEventArgs e)
            {
                TextBox TextboxNotas = (TextBox)sender;
    
                if (e.KeyChar == (char)8)
                {
                    e.Handled = false;
                    return;
                }
                else if (TextboxNotas.Text.Length >= 3)
                    e.Handled = true;
    
                if ((TextboxNotas.Text.Length == 0 || TextboxNotas.Text.Length >= 3) && e.KeyChar == '0')
                    e.Handled = true;
                else if (TextboxNotas.Text.Length == 0 && e.KeyChar > '0' && e.KeyChar < '6')
                    e.Handled = false;
                else if (TextboxNotas.Text.Length == 1 && e.KeyChar == '.')
                    e.Handled = false;
                else if (TextboxNotas.Text.Length == 2 && (Char.IsDigit(e.KeyChar) && TextboxNotas.Text[0] < '5') || e.KeyChar == '0')
                    e.Handled = false;
                else if (TxtEvaEsc1.Text.Length >= 3)
                    e.Handled = true;
                else
                    e.Handled = true;
                TextboxNotas.SelectionStart = TextboxNotas.Text.Length;
            }

    El cual lo configuro como mencionas "allí podes elegir el mismo método para todos."

    Muchas gracias.


    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 3:22
    • Editado VISANCOR74 viernes, 10 de abril de 2020 3:23
    viernes, 10 de abril de 2020 3:20

Todas las respuestas

  • Hola VISANCOR

    Tenes que validarlo después del o DURANTE el tipeo en el TextBox. Me imagino que es mientras escribis en el TextBox.

    Habría que controlar el evento KeyPress ... ahora lo hago y te lo paso.

    using System;
    using System.Windows.Forms;
    
    namespace WinFormsAppTextBoxValidation
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)8)
                {
                    e.Handled = false;
                    return;
                }
                else if (textBox1.Text.Length >= 3)
                    e.Handled = true;
    
                if ((textBox1.Text.Length == 0 || textBox1.Text.Length >= 3) && e.KeyChar == '0')
                    e.Handled = true;
                else if (textBox1.Text.Length == 0 && e.KeyChar > '0' && e.KeyChar < '6')
                    e.Handled = false;
                else if (textBox1.Text.Length == 1 && e.KeyChar == '.')
                    e.Handled = false;
                else if (textBox1.Text.Length == 2 && (Char.IsDigit(e.KeyChar) && textBox1.Text[0] < '5') || e.KeyChar == '0')
                    e.Handled = false;
                else if (textBox1.Text.Length >= 3)
                    e.Handled = true;
                else
                    e.Handled = true;
                textBox1.SelectionStart = textBox1.Text.Length;
            }
        }
    }

    Espero que resuelva tu problema.

    Saludos

    Pablo

    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 2:38
    viernes, 10 de abril de 2020 2:28
  • Buena noche gracias compañero Tigre Pablito, mcuhas bendiciones.

    Ahora me surge otra duda como hago para codificar para varios textbox, para no repetir el codigo muchas veces

    viernes, 10 de abril de 2020 2:38
  • Le asignas el mismo método controlador de evento a todos los textBox que se necesite. Si vas a las Propiedades de cualquier TextBox, a la Pestaña Eventos (la del rayo), allí podes elegir el mismo método para todos. Pero mira que van a ser los mismos límites, 1.0 y 5.0, si queres cambiar algún límite en otro TextBox tenes que hacer otro método.
    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 3:22
    viernes, 10 de abril de 2020 2:45
  • En realidad, si queres ponerles otros límites a otros TextBox, es escribir otro método o implementar un par de variables de clase
    viernes, 10 de abril de 2020 2:47
  • Gracias por responder tan rápido, pero no me queda muy claro.

    Este es el metodo.

    private void TxtEvaEsc1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)8)
                {
                    e.Handled = false;
                    return;
                }
                else if (TxtEvaEsc1.Text.Length >= 3)
                    e.Handled = true;
    
                if ((TxtEvaEsc1.Text.Length == 0 || TxtEvaEsc1.Text.Length >= 3) && e.KeyChar == '0')
                    e.Handled = true;
                else if (TxtEvaEsc1.Text.Length == 0 && e.KeyChar > '0' && e.KeyChar < '6')
                    e.Handled = false;
                else if (TxtEvaEsc1.Text.Length == 1 && e.KeyChar == '.')
                    e.Handled = false;
                else if (TxtEvaEsc1.Text.Length == 2 && (Char.IsDigit(e.KeyChar) && TxtEvaEsc1.Text[0] < '5') || e.KeyChar == '0')
                    e.Handled = false;
                else if (TxtEvaEsc1.Text.Length >= 3)
                    e.Handled = true;
                else
                    e.Handled = true;
                TxtEvaEsc1.SelectionStart = TxtEvaEsc1.Text.Length;
            }

    Y dices que a la pestaña de eventos del resto de textbox y que eliga el mismo metodo de arriba, el cual esta amarrado al textbox (TxtEvaEsc1), lo cual no funciona.

    Y si lo creo como un metodo aparte, como hago en el codigo para que sepa a que control deseo aplicar digo codigo.

    Ejemplo:

    else if (TxtEvaEsc1.Text.Length >= 3)

    Lo resalte en negrita.

    De antemano muchas gracias por su valiosa colaboración, dedicación y tiempo.



    viernes, 10 de abril de 2020 2:55
  • Gracias ya lo solucione con el siguiente código:

    private void ValidarNotas(object sender, KeyPressEventArgs e)
            {
                TextBox TextboxNotas = (TextBox)sender;
    
                if (e.KeyChar == (char)8)
                {
                    e.Handled = false;
                    return;
                }
                else if (TextboxNotas.Text.Length >= 3)
                    e.Handled = true;
    
                if ((TextboxNotas.Text.Length == 0 || TextboxNotas.Text.Length >= 3) && e.KeyChar == '0')
                    e.Handled = true;
                else if (TextboxNotas.Text.Length == 0 && e.KeyChar > '0' && e.KeyChar < '6')
                    e.Handled = false;
                else if (TextboxNotas.Text.Length == 1 && e.KeyChar == '.')
                    e.Handled = false;
                else if (TextboxNotas.Text.Length == 2 && (Char.IsDigit(e.KeyChar) && TextboxNotas.Text[0] < '5') || e.KeyChar == '0')
                    e.Handled = false;
                else if (TxtEvaEsc1.Text.Length >= 3)
                    e.Handled = true;
                else
                    e.Handled = true;
                TextboxNotas.SelectionStart = TextboxNotas.Text.Length;
            }

    El cual lo configuro como mencionas "allí podes elegir el mismo método para todos."

    Muchas gracias.


    • Marcado como respuesta VISANCOR74 viernes, 10 de abril de 2020 3:22
    • Editado VISANCOR74 viernes, 10 de abril de 2020 3:23
    viernes, 10 de abril de 2020 3:20
  • Hola VISANCOR74

     

    Gracias por levantar tu consulta en los foros de MSDN. Ya que la consulta fue respondida, procedo a cerrar el hilo. Si tienes alguna otra consulta te invitamos cordialmente a crear un nuevo hilo.

     

    Gracias por usar los foros de MSDN.

     

    Luis Diego Mora

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    viernes, 10 de abril de 2020 16:10
    Moderador