TextBox que solo admita números (enteros y decimales)

Algo que te va a venir bien es tener la posibilidad de disponer de un control TextBox en tu formulario que no permita otra entrada que no sean números.

Para ello vamos a disponer de una función (que incluirás en alguna de tus clases) que se encargará de controlar el carácter correspondiente a la pulsación recibida y devolverá el resultado si la pulsación recibida es un número o el separador decimal (si el TextBox va a admitir decimales).

El separador decimal es el  establecido en la configuración de Windows.

El control de la pulsación del usuario vas a realizarlo a partir del evento KeyPress del TextBox

El código de la función:

/// <summary>

        /// Establece si el carácter recibido es un número

        /// o un separador decimal.

        /// </summary>

        /// <param name=”c“>Carácter recibido</param>

        /// <param name=”AllowDecimals“>Establece si se admiten decimaes</param>

        /// <param name=”cad“>Cadena de control para evitar más de un separador decimal

        /// esta cadena correspondería con el contenido del textbox que se controla</param>

        /// <returns></returns>

        public static Boolean OnlyNumbers(string c, bool AllowDecimals, ref string cad)

        {

            string sep = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;

            if (c == “.” || c == “,”)

            {

                c = sep;

                if (AllowDecimals)

                {

                    if (cad.IndexOf(sep) > -1)

                    {

                        return true;

                    }

                    else

                    {

                        cad += c;

                        return true;

                    }

                }

                else

                {

                    return true;

                }

            }

            if (c == “-“)

            {

                if (cad.Length > 0)

                {

                    return true;

                }

                else

                {

                    cad += c;

                    return true;

                }

            }

            if (!char.IsControl(Convert.ToChar(c)) && !char.IsDigit(Convert.ToChar(c)))

            {

                return true;

            }

            return false;

        }

Para poner a prueba la función, crea un formulario con un TextBox y con un CheckBox con el que podrás controlar si vas a admitir decimales o no.

El TextBox podría ser como el siguiente:

Formulario de prueba

Agrega el siguiente código en el evento KeyPress del TextBox y CheckedChanged del CheckBox

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            bool AllowDecimals = this.checkBox1.Checked;

            TextBox tb = sender as TextBox;

            string antT = tb.Text;

            string t = tb.Text;

            e.Handled = OnlyNumbers(e.KeyChar.ToString(), AllowDecimals, ref t);

            if (antT != t)

            {

                tb.Text = t;

                tb.SelectionStart = tb.Text.Length;

            }

        }

 

        private void checkBox1_CheckedChanged(object sender, EventArgs e)

        {

            CheckBox chkBx = sender as CheckBox;

            if (!chkBx.Checked)

            {

                if (this.textBox1.Text.Contains(“.”))

                {

                    this.textBox1.Text = this.textBox1.Text.Replace(“.”, “”);

                }

                else

                {

                    if (this.textBox1.Text.Contains(“,”))

                    {

                        this.textBox1.Text = this.textBox1.Text.Replace(“,”, “”);

                    }

                }

            }

        }

Verás que cuando pulses las teclas dentro del TextBox solo responderá si lo que recibe es un número o el separador decimal si es que va a admitirse (dependerá de cómo esté el CheckBox)

Ponlo a prueba, piensa en cómo mejorarlo y comparte con nosotros tus progresos.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Información básica sobre protección de datos Ver más

  • Responsable: MTB Software de Ponent, SLU.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinet, SL que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver Política de cookies
Privacidad