none
Mostrar MDI en primer plano RRS feed

  • Pregunta

  • Hola,

    Desde un MDI hijo llamo a otro form con ShowDialog.

    Si hay más de un MDI hijo ya abierto, se muestra en primer plano el form que se abre con ShowDialog pero el MDI hijo que lo abre se sitúa detrás de los ya abiertos.

    He probado con TopLevel y TopMost pero no cambia nada.

    El código es el siguiente, en el evento Load:

     

    private: System::Void Historico_Load(System::Object^  sender, System::EventArgs^  e) {

        this->Show();
        Calendario^ formcal = gcnew Calendario(0);
        formcal->ShowDialog();

    ....

     

    ¿Cómo consigo para que el MDI hijo (Historico) que abre a formcal se sitúe delante de los MDI hijos ya abiertos?

     

    Gracias


    Liiid
    jueves, 26 de mayo de 2011 16:01

Respuestas

  • Talvez deberías incluir la rutina en el Activate en lugar del Load.

    El documento en primer plano es el documento activo y me parece que no le estás dando la oportunidad de activarse.

    • Marcado como respuesta Liiid viernes, 27 de mayo de 2011 10:25
    jueves, 26 de mayo de 2011 18:33
  • Te entendí mal, en vez de la rutina Activate() añadí el evento Activated.

    Ya aparecen todos los form correctamente.

    En el evento load:

     

    private: System::Void Historico_Load(System::Object^  sender, System::EventArgs^  e) {
       
        this->Show();
        this->Activate();
        Calendario^ formcal = gcnew Calendario(0);
        formcal->ShowDialog();

    ....

     

    Gracias!


    Liiid
    • Marcado como respuesta Liiid viernes, 27 de mayo de 2011 10:26
    viernes, 27 de mayo de 2011 10:25

Todas las respuestas

  • Al utilizar ShowDialog() el Form que abras siempre se situará encima del Form que lo llamó, esto ocurre hasta que cierres el Form, puedes usar en cambio el Show() y hacer que el Form Historico pase adelante.

    Saludos.


    Antonio Lobo
    jueves, 26 de mayo de 2011 18:29
  • Talvez deberías incluir la rutina en el Activate en lugar del Load.

    El documento en primer plano es el documento activo y me parece que no le estás dando la oportunidad de activarse.

    • Marcado como respuesta Liiid viernes, 27 de mayo de 2011 10:25
    jueves, 26 de mayo de 2011 18:33
  • Me parece, puedo estar equivocado, que la razón de usar ShowDialog() es para que ese formcal quede por encima del mdichild (histórico).

    Obviamente, debería llamar a formcal->Show(this->Owner). Esto produce el efecto de que formcal permanezca siempre por encima, con la ventaja de no inhabilitar al mdi.


    jueves, 26 de mayo de 2011 18:59
  • La razón de usar ShowDialog() es porque hasta que formcal no se cierre el form histórico no hace nada, espera datos de formcal.

    Lo que sucede es lo siguiente: tengo 4 form, main, histórico, formold y formcal.

    Main es el principal, padre de formold e histórico. Se abre formold y a continuación histórico, éste abre a su vez con ShowDialog() a formcal. Histórico no continuará realizando ninguna acción hasta que no finalice formcal. El problema que aparece es que al abrir histórico queda por detrás de formold y formcal en primer plano, que esto si está bien. Cuando se cierra formcal entonces histórico sí pasa a primer plano.

    He probado con el evento Activated en lugar del Load, pero sucede lo mismo.

    Por otro lado, también he probado con formcal->Show(this->Owner) pero no es exactamente lo que quiero ya que necesito datos de formcal para continuar con el histórico.


    Liiid
    viernes, 27 de mayo de 2011 8:08
  • Corrijo:

    El evento Activated sí me muestra los forms en el orden deseado pero surge un nuevo problema.

    Formcal sólo debe abrirse al cargar el form histórico, sin embargo, con este nuevo evento cada vez que histórico pasa de un segundo plano a primer plano (se acticva) se abre formcal.

    Por ahora, lo he solucionado poniendo en el evento Load: formcal->ShowDialog() y en el evento Activated: this->Show.

    Así, primero muestra formcal y hasta que éste no termine no muestra histórico.

    Aunque me gustaría que histórico quedase abierto por detrás de formcal.

     


    Liiid
    viernes, 27 de mayo de 2011 8:20
  • Te entendí mal, en vez de la rutina Activate() añadí el evento Activated.

    Ya aparecen todos los form correctamente.

    En el evento load:

     

    private: System::Void Historico_Load(System::Object^  sender, System::EventArgs^  e) {
       
        this->Show();
        this->Activate();
        Calendario^ formcal = gcnew Calendario(0);
        formcal->ShowDialog();

    ....

     

    Gracias!


    Liiid
    • Marcado como respuesta Liiid viernes, 27 de mayo de 2011 10:26
    viernes, 27 de mayo de 2011 10:25