none
El evento Load de mi formulario siempre se invoca cuando lo muestro con ShowDialog(this) RRS feed

  • 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

    viernes, 28 de febrero de 2020 18:09

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
    sábado, 29 de febrero de 2020 3:21

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

    viernes, 28 de febrero de 2020 19:11
  • 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

    sábado, 29 de febrero de 2020 1:23
  • 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
    sábado, 29 de febrero de 2020 3:21
  • Hola Pablo,

    Muchas Gracias por la solución propuesta, la implementé y funcionó como esperaba.

     Marino


    MLiranzo

    sábado, 29 de febrero de 2020 4:27