validar cajas de texto
-
Sunday, February 03, 2008 11:01 PM
Hola, a ver si alguien me puede ayudar:
Necesito validar una caja de texto, de forma que solo se puedan meter numeros positivos y negativos con decimales, pero no lo consigo. Lo intento hacer con el siguiente codigo:
private
void textoBox1_KeyPress(object sender, KeyPressEventArgs e){
if ((!char.IsDigit(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != ','))
e.Handled = true;
}
Alguien me puede ayudar?
Gracias
All Replies
-
Monday, February 04, 2008 12:01 AM
mira una forma de realizar estas validaciones es utilizando expresiones regulares y asi el codigo te queda mas elegante y mas legible, ademas que te quitas de arriba todas esas condiciones que a veces son dificil de comprobar, aqui te va un ejemplo y un link para que veas algo de las expresiones regulares.
Code Snippetprivate
void textBox1_KeyPress(object sender, KeyPressEventArgs e){
if (e.KeyChar == (char)Keys.Back){
return;}
string expresionRegular = @"^[-]|[0-9]|[\.]$"; if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), expresionRegular)){
true;e.Handled =
}
}
http://msdn2.microsoft.com/en-us/library/1400241x.aspx
no te olvides que si te ha sido util mi respuesta marcarla
saludos -
Monday, February 04, 2008 12:22 AM
Hola, muchas gracias por la molestia, he estado mirando las expresiones regulares y la verdad es que estan muy bien, pero el codigo que me mandas no consigo que me funcione, no me hace nada, me sigue permitiendo introducir el dato que quiera, me falta algo?
Gracias
-
Monday, February 04, 2008 1:09 AM
eso se lo pones en el KeyPress del textBox que quieres validar
-
Monday, February 04, 2008 1:14 AM
Si, mira yo hago esto:
private void tBOrigenX_KeyPress(object sender, KeyPressEventArgs e){
if (e.KeyChar == (char)Keys.Back)
{
return;
}
string expresionRegular = @"^[-]|[0-9]|[\.]$";
if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), expresionRegular))
{
e.Handled = true;
}
}
Pero no me funciona, me deja seguir introduciendo todo tipo de valores, se te ocurre algo?
Gracias
-
Monday, February 04, 2008 1:23 AM
mira revisa bien lo que estas haciendo si estas poniendo el codigo en el evento del textBox (lo que querias era entrar numeros con decimales y negativos no?), o si quieres mandame tu proyecto y asi no hacemos tan grande este hilo.
saludos
-
Monday, February 04, 2008 4:11 PMModerator
Debes atacar la validacion por dos flancos
1- Que solo ingresen los caracteres autorizados
2- Que esos caracteres tengan un orden logico, es decir no puede aparecer un menos al final o en la mitad y no puede haber mas de un punto...
lo 1ero con key press:
Code Snippetstring expresionRegular = @"^-|[0-9]|\.$"; private void textBox1_KeyPress(object sender, KeyPressEventArgs e){
if (e.KeyChar == (char)Keys.Back
char)Keys.Delete|| e.KeyChar == (
|| e.KeyChar == (
char)Keys.Left|| e.KeyChar == (
char)Keys.Right)
{
false;e.Handled =
}
else if (!Regex.IsMatch(e.KeyChar.ToString(), expresionRegular)){
true;e.Handled =
}
}
lo segundo con el evento validating:
Code SnippetRegex isnumber = new Regex(@"^-?[0-9]+(\.?[0-9]+)?$");
private void textBox1_Validating(object sender,System.ComponentModel.CancelEventArgs e)
{
if (isnumber.IsMatch(textBox1.Text) )
{
e.Cancel = false;
}
else
{
true;e.Cancel =
}
}
Ahora si quieres algo mas visible solo agrega un Errorprovider en el diseñador de la forma y modifica el codigo asi:
Code SnippetRegex isnumber = new Regex(@"^-?[0-9]+(\.?[0-9]+)?$");
private void textBox1_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{
if (isnumber.IsMatch(textBox1.Text) )
{
e.Cancel = false;
errorProvider1.SetError((
Control)sender, "");}
else
{
true;e.Cancel =
errorProvider1.SetError((
Control)sender, "Debe ingresar un numero valido");}
}
-
Monday, February 04, 2008 5:29 PM
Hola y sobre todo muchas gracias.
El key press me funciona bien, pero para la otra parte me falta algun using y me da el siguiente error:
No se puede encontrar el tipo o el nombre de espacio de nombres 'Regex' (¿falta una directiva using o una referencia de ensamblado?)
Gracias
-
Monday, February 04, 2008 7:28 PMModerator
Code Snippetusing
System.Text.RegularExpressions; -
Monday, February 04, 2008 7:40 PM
Muchisimas gracias, ya lo tengo solucionado
Un saludo
-
Monday, February 04, 2008 8:20 PM
Una ultima cosita,
¿Como puedo quitar el simbolo del error? es que aunque ponga el valor bien, una vez que se ha introducido un dato invalido, salta el error y luego no lo puedo quitar
Gracias
-
Monday, February 04, 2008 8:26 PMModerator
mdms Escribió: Una ultima cosita,
¿Como puedo quitar el simbolo del error? es que aunque ponga el valor bien, una vez que se ha introducido un dato invalido, salta el error y luego no lo puedo quitar
Gracias
no te entiendo a que te refiere.... pero creo que es esto revisa que este esta linea en el evento de validaciono una similar...:
Code Snippete.Cancel = false;
errorProvider1.SetError((Control)sender, ""); -
Monday, February 04, 2008 9:11 PM
Gracias, ya me sale.
Muy amable

