none
¿¿Abrir un windows form dentro de un panel?? RRS feed

  • Pregunta

  •  

     

    Buenas, tengo un problema, para hacer el trabajo mas sencillo, en vez de utilizar MDI, que lo veo mucho mas complicado a la hora de diseñar, he utilizado paneles.

     

    Entonces, tengo en mi formulario un panel y un botón por ejemplo. Cuando hago click en el botón, en ese panel, tendría que abrirse un formulario. Bien, por otro lado, en un principio en vez de utilizar windows form, utilice como formulario controles de usuario, entonces mi codigo al hacer click en ese boton, era el siguiente, x ejemplo:

     

    ucMenu newMenu = new ucMenu();

    panel.Controls.Clear();

    panel.Controls.Add(newMenu);

     

    y funcionaba perfectamente, ahora si en vez de ser ucMenu un control de usuario, es un formulario (windows form). Da error en tiempo de ejecución en newMenu.Controls.Add(newMenu); diciendome que no es posible agregar un control principal a un control o algo asi.

     

    ¿Hay alguna manera de abrir un formulario dentro de otro, bien con paneles o de otra forma? Sin utilizar MDI.

     

    En el caso de no tener otra alternativa, alguin sabe en el caso de utilizar MDI, como puedo tener solo un hijo abierto. Es decir, solo un formulario hijo abierto, no poder abrir mas formularios.

     

    Muchisimas gracias.

    miércoles, 26 de marzo de 2008 19:17

Respuestas

Todas las respuestas

  • Hola.

    Yo tuve un problema similar al tuyo hace poco tiempo ... lo resolvi de la siguiente manera:

    Code Snippet

                DefInstanceDocumentos.TopLevel = false;
                DefInstanceDocumentos.Parent = kryptonSplitContainer1.Panel2;
                DefInstanceDocumentos.Show();


    Donde DefInstanceDocumentos es la instancia de el winform

    Espero te sirva
    miércoles, 26 de marzo de 2008 20:34
  •  

    Mil gracias, Jesus, por lo que he visto, me funciona a la perfección.
    miércoles, 26 de marzo de 2008 22:22
  • No, no consigo que funcione.

    En la segunda linea (formulario.Parent = panel) da el siguiente error en tiempo de ejecución:

    No se puede agregar un control de nivel superior a un control.

     

    De todas formas, muchas gracias por la respuesta.

     

    miércoles, 26 de marzo de 2008 23:55
  • Buenas

    A mi me pasó 3/4 de lo mismo y opté, como tú, por usar un control de usuario en lugar de un Form.

    Lo que no sé es por que quieres un WinForm si al final no te interesa que se comporte como tal. Por curiosidad, ¿que limitaciones tiene el control de usuario para que lo descartes?

    jueves, 27 de marzo de 2008 8:48
  •  

    Balthamos, ninguna creo, es para una práctica de la universidad, tenía hecho el diseño con controles de usuario, pero nooooo, la profesora no lo quería asi. Me dijo que los controles de usuario tienen otra finalidad. Bien, pero si a mi me hacen el apaño, y de una manera muchisimo mas sencilla, no entiendo porque no puedo utilizarlos.

     

    Entonces, seguire intentandolo y si no... tendré que buscar la manera de hacerlo con MDI, que también lo tengo medio hecho asi, y otro lio y quebraderos de cabeza.

     

    Muchas gracias x contestar.

    jueves, 27 de marzo de 2008 13:55
  • Seguramente esta respuesta te llegue tarde, pero soy nuevo por estos lugares.
    Si se puede, lo unico que yo lo hago en Visual Basic

     

    Code Snippet

    Public Class Principal

    ' Definimos el nuevo formulario basandonos en el que queremos utilizar

    Dim frmDestino As New frmOrigen

     

    Private Sub Principal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

     

    ' Indicamos que el formulario no sera de maximo nivel, de lo contrario no podremos introducirlo dentro de

    ' otros controles, en nuestro caso un panel

    frm_frmDestino .TopLevel = False

     

    ' Definimos el panel que contendrá el formulario

    Dim pnlContenedor As New Panel

     

    ' Añadimos el formulario al panel

    pnlContenedor.Controls.Add(frmDestino )

     

    ' Mostramos el formulario

    frmDestino .Show()

    ' Añadimos el panel al formulario principal

    Me.Controls.Add(pnlContenedor)

    End Sub

     

    ' Despues en el evento Resize del formulario en el que se muestra el panel "pnlContenedor" volvemos a mostrar el formulario

    Private Sub Principal_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize

    ' Mostramos el formulario

    frmDestino .Show()

    End Sub

    End Class

     

     

    Seguramente se pueda optimizar pero ese es otro tema

     

    miércoles, 26 de noviembre de 2008 10:35
  • Hola.

    Yo tuve un problema similar al tuyo hace poco tiempo ... lo resolvi de la siguiente manera:

    Code Snippet

                DefInstanceDocumentos.TopLevel = false;
                DefInstanceDocumentos.Parent = kryptonSplitContainer1.Panel2;
                DefInstanceDocumentos.Show();


    Donde DefInstanceDocumentos es la instancia de el winform

    Espero te sirva

    Eso si funciona =)
    Gracias
    domingo, 26 de julio de 2009 2:33
  • :-)
    Hola,
    Dale un vistazo a este artículo que publiqué hace un tiempo.

    How to: Cómo insertar un WinForm dentro de un control TabPanel
    http://geeks.ms/blogs/lfranco/archive/2008/07/01/how-to-c-243-mo-insertar-un-winform-dentro-de-un-control-tabpanel.aspx

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    lunes, 27 de julio de 2009 8:02
    Moderador
  • Hola.

    Yo tuve un problema similar al tuyo hace poco tiempo ... lo resolvi de la siguiente manera:

    Code Snippet

                DefInstanceDocumentos.TopLevel = false;
                DefInstanceDocumentos.Parent = kryptonSplitContainer1.Panel2;
                DefInstanceDocumentos.Show();


    Donde DefInstanceDocumentos es la instancia de el winform

    Espero te sirva
    me salvo la vida :) :) :)
    miércoles, 12 de octubre de 2011 20:34
  • Gracias A mi me funciono bien me toco quitarle kryptonSplitContainer1
    viernes, 19 de julio de 2019 21:08