Principales respuestas
validar texbox vacios en c#

Pregunta
-
Saludos, el programa que estoy haciendo tiene dos texbox(para numeros), y un boton que cuando lo presione, mostrara la suma de esos dos numeros en una etiqueta. lo que quiero hacer es que cuando uno de los textbox este vacio, mande un aviso de que hay un campo vacio (puede ser un showbox u otra etiqueta) y no salga el error de ""exepcion no controlada"" cuando eso pase.
asi es como lo tengo:
private void suma_Click(object sender, EventArgs e)
{
double a = Convert.ToDouble(textBox1.Text);
double b = Convert.ToDouble(textBox2.Text);
double r = a + b;
bool vac;
bool full;
vac = textBox2.Text == "";
full = b > 0;
if (vac == true)
Fal.Text = "campos vacios";
if (full == true)
label4.Text = r.ToString();
}
la otra forma como lo tenia era:
private void suma_Click(object sender, EventArgs e)
{
double a = Convert.ToDouble(textBox1.Text);
double b = Convert.ToDouble(textBox2.Text);
double r = a + b;
if (textBox2.Text == "" )
Fal.Text = "campos vacios";
else
label4.Text = r.ToString();
}
Ninguna de las dos formas funcionaron, sigue saltando el error de ""Excepción no controlada del tipo 'System.FormatException' en mscorlib.dll""
¿alguien que me pueda ayudar?
- Editado Alan Smith 212121 viernes, 10 de enero de 2020 19:10
viernes, 10 de enero de 2020 19:10
Respuestas
-
hola
Tienes que usar el TryParse() algo como ser
double a = 0; if(!double.TryParse(textBox1.Text, out a)){ Fal.Text = "El valor del primer campo debe ser numerico"; return; }
double b = 0;
if(!double.TryParse(textBox2.Text, out b)){ Fal.Text = "El valor del segundo campo debe ser numerico"; return; }
//resto codigo
de esta forma no necesitas controlar un error y ademas queda mejor en el codigo si es que no pudo convertir
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina
- Editado Leandro TuttiniMVP viernes, 10 de enero de 2020 19:50
- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
- Marcado como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
viernes, 10 de enero de 2020 19:45 -
Hola Leandro , use tu codigo y me funciona perfectamente, muchisimas gracias por tu ayuda, quedo asi:
private void suma_Click(object sender, EventArgs e)
{
double a =0;
double b = 0;
double r = 0;
if (!double.TryParse(textBox1.Text, out a))
{
Fal.Text = "campos vacios";
return;
}
if (!double.TryParse(textBox2.Text, out b)){
Fal.Text = "campos vacios";
return;
}
else
{
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
r = a + b;
r.ToString();
return;
}
solo una cosa mas ¿que hace el "return;" al final de IF y else?
- Editado Alan Smith 212121 viernes, 10 de enero de 2020 20:21
- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
- Marcado como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
viernes, 10 de enero de 2020 20:20
Todas las respuestas
-
Hola,
Para mi la segunda es la correcta, pero no te funciona ya que haces las conversaciones y la suma antes de comprar si el textbox está vacío. Si las 3 primeras líneas las pones en el else veras como funciona.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.<br/> <
Blog- Marcado como respuesta Alan Smith 212121 viernes, 10 de enero de 2020 19:47
- Desmarcado como respuesta Alan Smith 212121 viernes, 10 de enero de 2020 19:47
- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
viernes, 10 de enero de 2020 19:27 -
hola
Tienes que usar el TryParse() algo como ser
double a = 0; if(!double.TryParse(textBox1.Text, out a)){ Fal.Text = "El valor del primer campo debe ser numerico"; return; }
double b = 0;
if(!double.TryParse(textBox2.Text, out b)){ Fal.Text = "El valor del segundo campo debe ser numerico"; return; }
//resto codigo
de esta forma no necesitas controlar un error y ademas queda mejor en el codigo si es que no pudo convertir
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina
- Editado Leandro TuttiniMVP viernes, 10 de enero de 2020 19:50
- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
- Marcado como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
viernes, 10 de enero de 2020 19:45 -
¿te refieres asi?
private void suma_Click(object sender, EventArgs e)
{
if (textBox2.Text == "")
Fal.Text = "campos vacios";
else
double a = Convert.ToDouble(textBox1.Text);
double b = Convert.ToDouble(textBox2.Text);
double r = a + b;
label4.Text = r.ToString();Me sigue saliendo error en la linea del: double a =Convert.ToDouble(texbox1.Text);
}viernes, 10 de enero de 2020 19:47 -
Tienes que evaluar también el textbox 1, pero como te dice Leandro es la forma más correcta.
Me imagino que esto es un ejercicio por lo que te sugiero que repasaras el and y el or en los if de C# que son con los símbolos && y ||
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.<br/> <
Blogviernes, 10 de enero de 2020 19:55 -
Hola Leandro , use tu codigo y me funciona perfectamente, muchisimas gracias por tu ayuda, quedo asi:
private void suma_Click(object sender, EventArgs e)
{
double a =0;
double b = 0;
double r = 0;
if (!double.TryParse(textBox1.Text, out a))
{
Fal.Text = "campos vacios";
return;
}
if (!double.TryParse(textBox2.Text, out b)){
Fal.Text = "campos vacios";
return;
}
else
{
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
r = a + b;
r.ToString();
return;
}
solo una cosa mas ¿que hace el "return;" al final de IF y else?
- Editado Alan Smith 212121 viernes, 10 de enero de 2020 20:21
- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
- Marcado como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:03
viernes, 10 de enero de 2020 20:20 -
Si lo haces como te ha comentado Leandro no te hace falta
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);Ya que out a carga en a el valor convertido del texbox1 lo mismo para out b.
Return suspende o cancela o como quieras llamarlo la ejecución del método, cuando llega al return ya no ejecuta más código de ese método.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.<br/> <
Blogviernes, 10 de enero de 2020 20:30 -
Ok ya entendi.viernes, 10 de enero de 2020 20:37
-
hola
>>¿que hace el "return;" al final de IF y else?
no va ningun else
el if sale de la funcion para no continuar si detectas que el valor del textbox no es valido
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:04
viernes, 10 de enero de 2020 21:45 -
Tranquilo, no supo resolverlo desde ese punto de vista, estamos para ayudar, dale la solución, explicale como implementar el try catch y listo. Ademas el try catch no funcionaria, ya que no habría problemas de excepciones por un campo vacio.
cervera
viernes, 10 de enero de 2020 22:23 -
Hola, te dejo un código que es flexible, recorre todos los controles de tu formulario que sean textboxs y los valida el siguiente método:
public bool vacio=true; public bool resultado = true; private void btn_Aceptar_Click(object sender, EventArgs e) //Este seria tu boton "suma" { Validar(this); //Al metodo le enviar el formulario donde estas (eso significa "this") if (Validar(this)) //Si la variable resultado sigue siendo verdadera, significa que todo esta completo { //codigo } } public bool Validar(Form formulario) { foreach (Control controles in formulario.Controls) //Busca el control { if (controles is TextBox & controles.Text == String.Empty) //Si esta vacio y es textbox { vacio = false; resultado = false; MessageBox.Show..... } else if (controles is TextBox & controles.Text != String.Empty) //Si no esta vacio { vacio = true; resultado = true; } } return resultado; }
cervera
viernes, 10 de enero de 2020 22:27 -
tu codigo deberia ser
private void suma_Click(object sender, EventArgs e) { double a = 0; double b = 0; if (!double.TryParse(textBox1.Text, out a)) { Fal.Text = "campos vacios"; return; } if (!double.TryParse(textBox2.Text, out b)) { Fal.Text = "campos vacios"; return; } double r = a + b; }
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Diana AcuñaModerator lunes, 13 de enero de 2020 16:04
sábado, 11 de enero de 2020 18:24