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.
Filed under: Windows Forms
La expresión regular es así:
Regex r = new Regex(@”(-)?(\d)+”);
Pero sale mal en el post… :S el [sourcecode] de WordPress tiene mucho que mejorar…
Si, es una muy buena opción ;)
La camiseta te la estas ganando con crecez jiji.
¿Por qué no puedo cerrar un formulario con un cuadro de texto numérico sin haber introducido nada en el mismo?
Un saludo.
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.
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!