Close de un form

05/02/2007 - 12:19 por ANT1 | Informe spam
Hola a todos.

Trabajando me ha salido un problema que no se de donde viene ni porque
lo hace. Os pongo primero en situacion.

Tengo una aplicacion windows en la que para editar la linea de un
datagridview (un objeto que he cargado de una base de datos) le doy a
un boton y esto me abre un nuevo formulario de edicion con los datos
de ese objeto. Formulario en dialogo (showdialog) para que no se puede
tener mas acceso que a este.

Hasta ahi bien. Dentro del formulario de edicion tengo dos botones,
aceptar y cancelar, cuando le pinchas a cualquiera te pregunta si
estas seguro de lo que vas a hacer con un nuevo dialogo y sus dos
botones "si" y "no". A la hora de "aceptar" sale la ventana y escojas
"si" o escojas "no" todo funciona perfectamente, pero a la hora de
cancelar si le pulso "no" no funciona.

El codigo es asi:

private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult resultado = MessageBox.Show("¿Desea cancelar?",
DialogButtons.YesNo);

if(resultado == dialogResult.Ok)
{
this.Close();
}
}

Por tanto si en en el messagebox yo no pulso "si", el programa no pasa
por el Close(), con lo que no se tendria q cerrar la ventana de
edicion. Pero cuando termina la comparacion, q al no dar OK pasa de
ella, se me cierra la ventana. He puesto los eventos FormClosing y
FormClosed para verlo paso a paso y por lo menos segun termina ese
fragmento de codigo va a estos eventos.

No se pq y de donde se saca el formulario de edicion q se cierre si no
llega a ejecutarse ese Close() de ahi arriba.

En el boton de aceptar de la ventana de editar trabajo igual y no hace
eso.

private void buttonAceptar_Click(object sender, EventArgs e)
{
DialogResult resultado = MessageBox("¿Desea modificar los datos de
la BD?", MessageButtons.YesNo);

if(resultado == DialogResult.OK)
{
try
{
// Todo el proceso de guardardo de datos
}
catch
{
// Saca por pantalla el error
}
finally
{
this.close();
}
}
}

Esto ultimo que como podeis ver tiene la misma logica que el boton de
cancelar funciona perfectamente.

Si alguien se le ocurre porque puede ser o como mirar a ver...

Gracias a todos

P.D: Decir que me he fijado en los botones y no tengo definido ninguno
como "cancelbutton" de ningun formulario.
 

Leer las respuestas

#1 Octavio Hernandez
05/02/2007 - 12:42 | Informe spam
Es que CancelButton no indica al botón que tiene asociado el valor
DialogResult.Cancel,
sino al botón cuyo código deseas que se ejecute en caso de q el usuario
pulse la tecla ESC.
Son dos cosas diferentes.

Slds - Octavio



"ANT1" escribió en el mensaje
news:
He solucionado el problema.

El VS2005 a pesar que en la propiedad del formulario "CancelButton" me
indicaba que no habia ninguno definido como tal ((none)), en el
designer.cs del formulario mantenia la propiedad que ese boton tenia
un DialogResult = Cancel.

Ciertamente al crear el formulario editor en un inicio indique dicha
propiedad de a ese boton, pero si despues modifico dicha propiedad a
(none) esperaria que esa propiedad hiciese los cambios necesarios al
igual que hizo en el proceso contrario.

Me parece un bug de la leche que en un caso te modifique el codigo y
en el otro caso no.

Preguntas similares