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:

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.

Scroll al inicio
Abrir chat
1
Hola
¿En qué podemos ayudarte?