Principales respuestas
El evento Load de mi formulario siempre se invoca cuando lo muestro con ShowDialog(this)

Pregunta
-
Hola Señores del foro,
Tengo este inconveniente al mostrar mi formulario con ShowDialog(this), y es que invoca el evento Load aunque solo haya ocultado el formulario con el evento Hide(). El problema de esta situación, es, que en el manejador del evento Load() tengo variables inicializadas por defecto y que cambian en el transcurso del proceso, entonces el formulario siempre me lleva el formulario al estado de inicio. La instancia que creo para mostrar el formulario la hago fuera del evento donde muesto el formulario por tanto, no estoy creando un nuevo formulario.
Por otro lado, si muestro el formulario con Show(this), cuando lo oculto con Hide() se minimiza el formulario parent lo cual me resulta bastante desagradable e inconveniente.
Atte. Marino Liranzo
MLiranzo
Respuestas
-
Se me ocurrió otra cosa, crear una variable de clase, bool, que en el método del Load, si es false ejecute el código y luego le asigne true, así ya la 2da vez, al invocar a ShowDialog() no vuelve a ejecutar el código del evento Load.
private bool loaded = false; // miembro de la clase "form hijo"
// en el método del eveto Load
if (loaded == false)
{
// todo el código del Load
loaded = true;
}
Esto, de funcionar, sería lo que en programación se llama un "parche"
Saludos
- Marcado como respuesta MLiranzo sábado, 29 de febrero de 2020 4:27
Todas las respuestas
-
Hola Marino
Quizás podrías probar, en lugar de ShowDialog(), poner Visible a true? La verdad no estoy seguro, porque nunca uso Hide().
form.Visible = true;
Y si no funciona, podes usar para ocultarlo
form.Visible = false;
Y luego posiblemente, funcione seguro el
form.Visible = true;
Espero te ayude
Saludos
Pablo
- Propuesto como respuesta Diana AcuñaModerator lunes, 2 de marzo de 2020 18:38
-
Gracias Pablo por dedicar su tiempo a mi problema.
He probado ambas soluciones planteadas por usted y este caso particular no funciona por que al mostrar el formulario lo hago con Show(this) o ShowDialog(this), en este caso "this" establece referencias para conectar unas variables al formulario principal que están en el formulario hijo. Esta conexión es del tipo "owner.variables = variables", por tanto, al mostrar el formulario con form.Visible = true, genera una excepción de referencia no establecida.
Saludos
Marino.
MLiranzo
-
Se me ocurrió otra cosa, crear una variable de clase, bool, que en el método del Load, si es false ejecute el código y luego le asigne true, así ya la 2da vez, al invocar a ShowDialog() no vuelve a ejecutar el código del evento Load.
private bool loaded = false; // miembro de la clase "form hijo"
// en el método del eveto Load
if (loaded == false)
{
// todo el código del Load
loaded = true;
}
Esto, de funcionar, sería lo que en programación se llama un "parche"
Saludos
- Marcado como respuesta MLiranzo sábado, 29 de febrero de 2020 4:27
-