TextBox Numérico

En respuesta a Ander y a sus dos últimos post:
.NET: Validar que introducimos números enteros en un TextBox
.NET: Validar que introducimos números enteros en un TextBox (2ª parte), o como usar int.TryParse

Voy a publicar cómo crear un TextBox numérico y validar correctamente el contenido de este:

public class NumericTextBox : TextBox
{
    protected override bool ProcessDialogKey(Keys keyData)
    {
        if ((keyData.CompareTo(Keys.D0) >= 0 && keyData.CompareTo(Keys.D9) <= 0)
            || (keyData.CompareTo(Keys.NumPad0) >= 0 && keyData.CompareTo(Keys.NumPad9) <= 0)
            || keyData.Equals(Keys.Tab)
            || keyData.Equals(Keys.Return)
            || keyData.Equals(Keys.Enter)
            || keyData.Equals(Keys.Delete)
            || keyData.Equals(Keys.Back)
            || keyData.Equals(Keys.Control | Keys.V)
            || keyData.Equals(Keys.Control | Keys.X)
            || keyData.Equals(Keys.Control | Keys.C)
            //Por si permitimos números negativos.
            || ((keyData.Equals(Keys.Subtract)
                || keyData.Equals(Keys.OemMinus))
                && Text.IndexOf('-') < 0
                && SelectionStart == 0)
            )
            return base.ProcessDialogKey(keyData);
        else
            return true;
    }

    protected override void OnValidating(System.ComponentModel.CancelEventArgs e)
    {
        Text = Text.Trim();
        //Validamos con una expresión regular.
        Regex r = new Regex(@"(-)?(\\d)+");
        e.Cancel = !r.Match(Text).Success;
        base.OnValidating(e);
    }
}

Lo que hacemos es heredar de la clase TextBox y sobreescribir dos métodos claves: ProcessDialogKey y OnValidating. El primero nos permite filtrar las teclas (o combinación) que van a ser aceptadas por el TextBox y el segundo nos permitirá asegurar la validación.

5 Responses to “TextBox Numérico”


  1. 1 Rafa Vargas September 28, 2007 at 10:06

    La expresión regular es así:
    Regex r = new Regex(@”(-)?(\d)+”);

    Pero sale mal en el post… :S el de WordPress tiene mucho que mejorar…

  2. 2 Ander September 28, 2007 at 10:59

    Si, es una muy buena opción ;)
    La camiseta te la estas ganando con crecez jiji.

  3. 3 Miguel Ángel January 8, 2008 at 11:20

    ¿Por qué no puedo cerrar un formulario con un cuadro de texto numérico sin haber introducido nada en el mismo?

    Un saludo.

  4. 4 Vargas January 8, 2008 at 13:58

    Pues porque se espera que escribas un número en él. Como solución a tu problema podrías hacer lo siguiente: si no se ha escrito nada, en la validación insertarás un 0. En cualquier otro caso, también puedes modificar la expresión regular.

    Un saludo.

  5. 5 Miguel Ángel January 8, 2008 at 14:55

    De acuerdo. Lo he solucionado comprobando si se ha introducido o no datos, es decir, si Text.Length > 0 realizo la validación mediante la expresión regular y si no directamente ejecuto la instrucción base.OnValidating(e);

    Muchas gracias y feliz año!


Comments are currently closed.



About me


My name is Rafa Vargas. I'm an undergraduate student of Computer Science at University of Seville, Spain. I am mainly interested in computer security, usability and the business of software.

Click here to read the full story.

Twitter subscription

Error: Twitter did not respond. Please wait a few minutes and refresh this page.

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Archives