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.

Advertisement

5 Responses to “TextBox Numérico”


  1. 1 Rafa Vargas 28 September 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 28 September 2007 at 10:59

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

  3. 3 Miguel Ángel 8 January 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 8 January 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 8 January 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

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

Join 6 other followers

Archives


Follow

Get every new post delivered to your Inbox.