locked
Se puede abrir un formulario dentro de otro formulario? RRS feed

  • Pregunta

  • Cómo están compañeros foristas? Saludos.

    Me estaba preguntando si existe la manera de abrir formularios dentro de un formulario principal. Lo pregunto porque he visto programas que lo hacen, pero no sé si VB 2008 traiga esa opción.

    Una de las razones por las que quiero implementar esto es para lograr que cuando la aplicación principal se minimice, lo hagan también las ventanas abiertas dentro de la aplicación, cosa que también he visto en algunos programas.

    Entonces, sí existe la forma?

    Si quieres APRENDER solo tienes que QUERER...
    domingo, 20 de diciembre de 2009 22:43

Respuestas

  • hola

    - por formulario principal te refires a uno del tipo MDI ?

    si es asi puedes hacer con el metodo Show(), por supuesto rpeviamente asignando la propeidad MdiParent

    Dim form As New Form2
    form.MdiParent = Me

    form.Show()

    seria basicamente esta la forma de hacerlo

    bueno espero haber entendido bien la pregunta
    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Jeison Friedman lunes, 21 de diciembre de 2009 2:57
    domingo, 20 de diciembre de 2009 22:50

Todas las respuestas

  • hola

    - por formulario principal te refires a uno del tipo MDI ?

    si es asi puedes hacer con el metodo Show(), por supuesto rpeviamente asignando la propeidad MdiParent

    Dim form As New Form2
    form.MdiParent = Me

    form.Show()

    seria basicamente esta la forma de hacerlo

    bueno espero haber entendido bien la pregunta
    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Jeison Friedman lunes, 21 de diciembre de 2009 2:57
    domingo, 20 de diciembre de 2009 22:50
  • Ok. Ya hice esta parte: form.MdiParent = Me, pero me da un error, creo que porque me falta configurar el formulario principal como contenedor. Cómo podría hacer eso?
    Si quieres APRENDER solo tienes que QUERER...
    domingo, 20 de diciembre de 2009 23:37
  • hola

    al formulario principal busca la propiedad IsMdiContainer

    esto realizalo en tiempo de diseño
    de esta forma ya dejaras fino a este formulario como contenedor de formulario MDI

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Roberto Catalán miércoles, 25 de enero de 2012 4:38
    domingo, 20 de diciembre de 2009 23:39
  • Ya lo vi, gracias. Pero tengo dos problemas con eso:

    1. Me asigna un color automático al formulario, y ya le tengo su color definido.

    2. No me muestra el formulario al llamarlo (form.show()). No me dio el error pero no me lo muestra.

    Qué crees que pueda ser? Seguiré revisando.

    Si quieres APRENDER solo tienes que QUERER...
    domingo, 20 de diciembre de 2009 23:46
  • hola

    - lo del color podrias cambiarlo si usas la propiedad BackColor del formulario


    - lo que no muestra el formulario, mm la verdad es raro
    habria que revisar que puede estar pasando, pero desde donde lanzas la apertura?
    lo haces desde alun item del menu del formulario principal, de algun boton quizas, has verificado que lso handler de los evento estan correctos y no se muestre l form porque en realidad no se lanza el evento


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 20 de diciembre de 2009 23:51
  • Ya revisé, aunque sigo sin solucionarlo. Quité la línea form.MdiParent = Me y me muestra el formulario. O sea que ahí está el problema. Algo debe faltarme.
    Si quieres APRENDER solo tienes que QUERER...
    domingo, 20 de diciembre de 2009 23:56

  • este formulario lo estas abriendo directamente desde el formulario que ahs definido como MDIContainer ?

    o lo abres desde un formulario hijo?

    lo preguntpo porque por ahi el uso del Me al asignar la propeidad MdiParent cambie segun desde donde lo abres

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 21 de diciembre de 2009 0:03
  • Además, la propiedad BackColor del formulario principal se deshabilita al establecerlo como contenedor MDI.
    Si quieres APRENDER solo tienes que QUERER...
    lunes, 21 de diciembre de 2009 0:06
  • Sí, lo estoy abriendo desde el menú del formulario principal. Esta es la sentencia:

    Private Sub ArticulosToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArticulosToolStripMenuItem1.Click
              Articulos.MdiParent = Me
              Articulos.Show()
    End Sub

    No sé qué pasa.

    Si quieres APRENDER solo tienes que QUERER...
    lunes, 21 de diciembre de 2009 0:19
  • hola

    para cambiar el colo de formado no podras hacerlo desde las propeidades directa del formulario lo deberas hacer poc codigo

    analiza el ejemplo del link
    Form. IsMdiContainer

    deberas agregar el codigo

    private void Form1_Load(Object sender, System.EventArgs e)
    {
        SetBackGroundColorOfMDIForm();
    }

    private void SetBackGroundColorOfMDIForm()
    {
        for (int iCtr = 0; iCtr < this.get_Controls().get_Count(); iCtr++) {
            Control ctl = this.get_Controls().get_Item(iCtr);
            if (ctl instanceof MdiClient) {
                // If the control is the correct type,
                // change the color.
                ctl.set_BackColor(System.Drawing.Color.get_PaleGreen());
            }
        }
    }

    como veras es algo rebuscado


    con respeto al form, no veo que hayas creado la instancia

    Private Sub ArticulosToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ArticulosToolStripMenuItem1.Click
       
        Dim form New Articulos()
       
        form.MdiParent = Me
        form.Show()
       
    End Sub


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 21 de diciembre de 2009 0:26
  • Gracias! Ya vi lo que pasaba. Casualmente tengo un control Panel justo en medio del formulario principal, y lo que pasaba era que cuando abría el otro formulario quedaba por debajo del panel. Ahora tengo que probar cómo hacer que el panel quede por debajo.
    Si quieres APRENDER solo tienes que QUERER...
    lunes, 21 de diciembre de 2009 0:44
  • Oye, otra pregunta. Lo único que puedo usar como contenedor es un formulario o hay algún control que funcione de ese modo? Me serviría más usar un control en vez del formulario.
    Si quieres APRENDER solo tienes que QUERER...
    lunes, 21 de diciembre de 2009 1:03
  • solo si por casualidad desees usar o cambiar el fondo del formulario MDparent o container la propiedad backcolor es dificil implementar , pero lo que puedes es hacer una imagen de color ediatndola con Micorosoft Paint y despues lo pones como bacgraound image y listo,...saludos


    Melvin.
    Marca como respuesta a la mejor contestacion que el usuario Responda....Melvin
    lunes, 21 de diciembre de 2009 1:06
  • Gracias Melvin. Es una solución. Lo malo es que tengo un módulo de personalización gráfica que permite al usuario cambiar el color de fondo del formulario principal, pero con esta limitación no será posible. De todos modos esa parte ya la tengo resuelta.

    Lo que sí me gustaría saber es lo último que pregunté, a saber, si en vez de definir al formulario como contenedor puedo usar un control como el Panel, por ejemplo, para que este sea el contenedor de los subformularios.

    Otra cosa que me inquieta es que los formularios "hijo" se van al fondo del formulario "padre", haciendo que los demás controles queden por encima de dicho formulario "hijo". Se puede solucionar?

    Si quieres APRENDER solo tienes que QUERER...
    lunes, 21 de diciembre de 2009 1:19
  • Generalmente el formulario MDparen es como solo contenedor y los formularion que se mustran dentro de el se muestran como background y lo que quiere decir es que es sencible  ya que los formularios se muestran como imagen , como si solo estubieras mostrando una imagen plasmada en el form con la diferencia de que estos formuarios hijos se puede mover y  las imagenes no,,, bueno la idea es que creo que sera imposible ya que cualquier otro control que pongas  encina del mdparen cubriran los otros formuarios que se estan mostrando sencitivamente . laver dad no creo yo estoy trabajando en uno cimilar ahorita y esa fue la unica solucion que hacer par evitar el color gris del parent form,,,,,,




    Marca como respuesta a la mejor contestacion que el usuario Responda....Melvin
    lunes, 21 de diciembre de 2009 1:46
  • SOY NUEVA CON ESTE ASUNTO, 

    ESTOY DESARROLLANDO EN .NET EN VS2010

    Y TENGO FORM_PRINCIPAL

    Y TENGO UN MENUSTRIP CON VARIAS OPCIONES NADA ITEM ABRE UNA NUEVA FORM, PERO QUIERO QUE ESTE DENTRO DE LA PRINCIPAL, DEBO COLOCAR UN CONTENEDOR? 

     

    DE ANTEMANO GRACIAS.... 

    viernes, 18 de febrero de 2011 20:09
  • Sencillo.

    Primero debes cambiar al formulario principal la propiedad IsMdiContainer a True

    Segundo Añadir un form nuevo que se llame Frmtool o como quieras.

    Tercero crear una referencia a este nuevo form con un boton ej:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim MiForm As New Frmtool
            MiForm.MdiParent = Me
            MiForm.Show()
        End Sub

    Y listo ya debes tener un a ventana dentro de otra.

    Saludos...

    • Propuesto como respuesta Ntfsdan32 lunes, 10 de septiembre de 2012 4:34
    lunes, 10 de septiembre de 2012 4:34