locked
Problema con un formulario MDI... sus hijos y un modal del hijo... RRS feed

  • Pregunta

  • Hola a todos. Seguramente seria un titulo para una obra de teatro, pero me surgio un problemita con los MDI. Tengo definido un formulario MDI principal desde el cual disparo una serie de formularios "hijos" del principal. Resulta que ahora me apareció una dificultad con uno de esos formularios, que tiene que disparar un formulario modal de él. He intentado hacer algunas cosas, pero no me funcionaron. Alguien podria darme una mano de como podria llamar desde ese formulario hijo, al otro formulario modal ?

    Saludos a todos y desde ya muchas gracias 

    domingo, 25 de abril de 2010 19:56

Respuestas

  • "Ubuntu-Man" preguntó:

    > Alguien podria darme una mano de como podria llamar desde ese
    > formulario hijo, al otro formulario modal ?

    Hola:

    Para mostrar a un formulario de manera "modal", que yo sepa, solamente hay una única manera de hacerlo: llamando a su método ShowDialog:

         Dim frm As New FormModal

         frm.ShowDialog()

         frm.Dispose()

    Para más información, consulta el siguiente artículo:

    Abrir y cerrar formularios con Visual Basic .net

    Un saludo


    Enrique Martínez [MS MVP - VB]
    domingo, 25 de abril de 2010 20:30
    Moderador
  • hola

    un consejo en la misma linea puedes definir e instancia el formulario, no ahce falta dos linea, o se esto no hace falta:

    Dim objForm As Form

    objForm = New FrmUsuarios

    puedes hacer algo como esto:

    Dim objForm New FrmUsuarios

    ademas a objForm lo estabas declarando como form generic y no del tipo que querias visualizar

     

    en tu caso lo que puedes hacer son dos cosas, o lo que menciona Enrique, o sea desde el FrmUsuarios, instancia el frmUsuariosPermisos , pero sin asignar el MdiParent, (ya que con esto no podrias usar el ShowDialog)

    y hacer

    Using frmUsuPermisos As New frmUsuariosPermisos

        frmUsuPermisos.ShowDialog()

    End Using

    Nota: con el using te evitas el Close()

    Pero este lo que ahces es fijar el formulario por fuera de la aplicacion MDI, la otra es usar algo como esto

    WinForms MDI Formularios modales

    como veras sua las api de windows, pero permite quwe dentro del ambiente modal, usar un formulario MDI, igual no es 100% mdi, ya que si puedes accionar el form inferior, pero si lo pones el gris las opciones quedaria sin posibilidad de accion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Leandro TuttiniMVP martes, 27 de abril de 2010 0:18
    • Marcado como respuesta Mint Man domingo, 2 de mayo de 2010 1:40
    martes, 27 de abril de 2010 0:18

Todas las respuestas

  • hola

    por llamar al form modal desde el hijo te refieres que quieres simplemente abrir el formulario, o comunicarte con el mismo

    si desde el form hijo es que realzias la apertura y por lo tanto tienes la instancia del mismo podrias acceder sin problema a las propeidades y metodo publicas que este expone

    o por ahi entendi mal la pregunta, por ahi si pones algun ejmeplo en codigo de lo que intentas lograr podramos ver de que se trata el problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 25 de abril de 2010 20:27
  • "Ubuntu-Man" preguntó:

    > Alguien podria darme una mano de como podria llamar desde ese
    > formulario hijo, al otro formulario modal ?

    Hola:

    Para mostrar a un formulario de manera "modal", que yo sepa, solamente hay una única manera de hacerlo: llamando a su método ShowDialog:

         Dim frm As New FormModal

         frm.ShowDialog()

         frm.Dispose()

    Para más información, consulta el siguiente artículo:

    Abrir y cerrar formularios con Visual Basic .net

    Un saludo


    Enrique Martínez [MS MVP - VB]
    domingo, 25 de abril de 2010 20:30
    Moderador
  • Hola Leandro, Desde el MDI principal llamo al formulario frmUsuarios asi:

    'Dimensiono el nuevo objeto como un formulario

            Dim objForm As Form

     

            'Defino el nuevo objeto como el formulario que quiero mostrar

            objForm = New FrmUsuarios

     

            'Especifico quien es el formulario padre

            objForm.MdiParent = Me

     

            'Muestro el formulario

            objForm.Show()

    Desde el formulario frmUsuarios quiero llamar a otro formulario mas pequeño que se llama frmUsuariosPermisos que quiero que sea modal de frmUsuarios y por lo tanto sera modal de toda la aplicacion. 

    Como se hace ? 

    Saludos

    lunes, 26 de abril de 2010 22:49
  • hola

    un consejo en la misma linea puedes definir e instancia el formulario, no ahce falta dos linea, o se esto no hace falta:

    Dim objForm As Form

    objForm = New FrmUsuarios

    puedes hacer algo como esto:

    Dim objForm New FrmUsuarios

    ademas a objForm lo estabas declarando como form generic y no del tipo que querias visualizar

     

    en tu caso lo que puedes hacer son dos cosas, o lo que menciona Enrique, o sea desde el FrmUsuarios, instancia el frmUsuariosPermisos , pero sin asignar el MdiParent, (ya que con esto no podrias usar el ShowDialog)

    y hacer

    Using frmUsuPermisos As New frmUsuariosPermisos

        frmUsuPermisos.ShowDialog()

    End Using

    Nota: con el using te evitas el Close()

    Pero este lo que ahces es fijar el formulario por fuera de la aplicacion MDI, la otra es usar algo como esto

    WinForms MDI Formularios modales

    como veras sua las api de windows, pero permite quwe dentro del ambiente modal, usar un formulario MDI, igual no es 100% mdi, ya que si puedes accionar el form inferior, pero si lo pones el gris las opciones quedaria sin posibilidad de accion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Leandro TuttiniMVP martes, 27 de abril de 2010 0:18
    • Marcado como respuesta Mint Man domingo, 2 de mayo de 2010 1:40
    martes, 27 de abril de 2010 0:18
  • Leandro, Enrique... anduvo barbaro lo que me recomendaron... Puntualmente Leandro funciono fantastico la primera parte de tu ultimo comentario. Saludos y desde ya muchas gracias...

    domingo, 2 de mayo de 2010 1:37