none
Abrir Form dentro de otro o dentro de un panel RRS feed

  • Pregunta

  • Hola que tal estoy empezando a realizar aplicaciones de escritorio en C# WindowsForm y quiero realizar una pequeña aplicación pero, quiero hacer algo similar a las ventanas de windows con los botones siguiente y atras, para ser mas especifico como las flechas que aparecen en la parte superior de la izquierda de una ventana de windows.

    Espero haber explicado bien lo que quiero hacer de antemano agradezco por sus respuestas!

    Gracias!

    jueves, 10 de noviembre de 2011 1:24

Respuestas

  • Hola

    Para esto que deseas ahi que hacer unas ciertas modificaciones:

    1. En el diseñador del form al panel que se encarga de mostrar el FormHijo define la propiedad ANCHOR con los valores: Top, Bottom, Left, Right
    2. Del lado del codigo debes hacer algo como:

    private void AddFormInPanel(object formHijo)
    {
                if (this.panelContenedor.Controls.Count > 0)
                    this.panelContenedor.Controls.RemoveAt(0);
                Form fh = formHijo as Form;
                if (fh.Size.Height > Size.Height || fh.Size.Width > Size.Width)
                {
                    this.Size = new Size(fh.Width + btMostrarHijo2.Size.Width, fh.Height + btMostrarHijo2.Size.Height);
                }
                fh.TopLevel = false;
                fh.FormBorderStyle = FormBorderStyle.None;
                fh.Dock = DockStyle.Fill;
                this.panelContenedor.Controls.Add(fh);
                this.panelContenedor.Tag = fh;
                fh.Show();
    }
    

    Como veras eh incluido un condicional que pregunta si el Form Hijo es mas grande que el padre, de ser TRUE se cambia el valor de la propiedad Size del form padre con los valores que vienen del form hijo, ademas le sumo el valor que tenga el panel de navegacion :) de primera esto esta mal... pues debes tener un indicador mas acertado de estos valores, pero creo que servira de guia.

    Ahora bien... el que pienses en eso,... mmm... me hace pensar en un mal diseño de tu app. en cuanto a presentacion, siempre el padre si no es FullScreen se trata de que sea mas grande que todos sus hijos, pero bueno evalua si te va y me cuentas.

    Saludos


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    • Marcado como respuesta Nerk10 viernes, 11 de noviembre de 2011 5:27
    jueves, 10 de noviembre de 2011 16:41

Todas las respuestas

  • hola

    no has evaluado crear user control ? con estos podrias desarrollarlo como formulario pero lo podrias cargar dentro de paneles o Tabs como controles

     

    sino la otra es algo como esto

     

    How to: Cómo insertar un WinForm dentro de un control TabPanel

     

    pero igual creo que el user control  imagen queda mucho mejor

    Developing Custom Windows Forms Controls with the .NET Framework

    Creating a Windows Form User Control

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 10 de noviembre de 2011 1:42
  • Hola

    Precisamente tengo un post en mi blog en el que hago esto que pides, mira:

    http://nicolocodev.wordpress.com/2011/07/24/forms-en-paneles/

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    jueves, 10 de noviembre de 2011 3:02
  • Que tal me parece bien la solución es mas casi lo logro, solo que un detalle, no se si existe una propiedad o como establecer al Form para que ocupen todos el mismo tamaños de pantalla?, osea el mismo tamaño para todos los Form.

    Gracias!

    jueves, 10 de noviembre de 2011 15:20
  • Hola,

    Puedes utilizar la propiedad Dock de los formularios y establecerla a DockStyle.Fill.

    Saludos,


    phurtado
    jueves, 10 de noviembre de 2011 15:48
    Moderador
  • en concreto eso es lo que hago justamente como me lo indicó: Nicoloco de la siguiente manera:

    Yo quisiera que se abrieran los Form con el tamaño que tiene, osea si el Form-padre es de un tamaño menor que el Form-hijo se ajuste el From-padre al del tamaño Form-hijo, no se si me explique del todo bien,creo yo que esto se manipula con el panel que va a contener los demas Form-hijos que lleguen a él y después poder ajustar el mismo tamaño pero al Form-padre, pero no se como hacerlo.

    private void AddFormInPanel(object formHijo)
    {
                if (this.panelContenedor.Controls.Count > 0)
                    this.panelContenedor.Controls.RemoveAt(0);
                Form fh = formHijo as Form;
                fh.TopLevel = false;
                fh.FormBorderStyle = FormBorderStyle.None;
                fh.Dock = DockStyle.Fill;
                this.panelContenedor.Controls.Add(fh);
                this.panelContenedor.Tag = fh;
                fh.Show();

    jueves, 10 de noviembre de 2011 16:11
  • Hola

    Para esto que deseas ahi que hacer unas ciertas modificaciones:

    1. En el diseñador del form al panel que se encarga de mostrar el FormHijo define la propiedad ANCHOR con los valores: Top, Bottom, Left, Right
    2. Del lado del codigo debes hacer algo como:

    private void AddFormInPanel(object formHijo)
    {
                if (this.panelContenedor.Controls.Count > 0)
                    this.panelContenedor.Controls.RemoveAt(0);
                Form fh = formHijo as Form;
                if (fh.Size.Height > Size.Height || fh.Size.Width > Size.Width)
                {
                    this.Size = new Size(fh.Width + btMostrarHijo2.Size.Width, fh.Height + btMostrarHijo2.Size.Height);
                }
                fh.TopLevel = false;
                fh.FormBorderStyle = FormBorderStyle.None;
                fh.Dock = DockStyle.Fill;
                this.panelContenedor.Controls.Add(fh);
                this.panelContenedor.Tag = fh;
                fh.Show();
    }
    

    Como veras eh incluido un condicional que pregunta si el Form Hijo es mas grande que el padre, de ser TRUE se cambia el valor de la propiedad Size del form padre con los valores que vienen del form hijo, ademas le sumo el valor que tenga el panel de navegacion :) de primera esto esta mal... pues debes tener un indicador mas acertado de estos valores, pero creo que servira de guia.

    Ahora bien... el que pienses en eso,... mmm... me hace pensar en un mal diseño de tu app. en cuanto a presentacion, siempre el padre si no es FullScreen se trata de que sea mas grande que todos sus hijos, pero bueno evalua si te va y me cuentas.

    Saludos


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    • Marcado como respuesta Nerk10 viernes, 11 de noviembre de 2011 5:27
    jueves, 10 de noviembre de 2011 16:41
  • Quedo muy bien así solo hice una pequeña modificación falto agregarle también el Size al panel contenedor entonces queda así:

    public void add_Form_Size(object formSon)

            {

                if (this.panel_contenedor.Controls.Count > 0)

                    this.panel_contenedor.Controls.RemoveAt(0);

                Form fh = formSon as Form;

                if (fh.Size.Height > Size.Height || fh.Size.Width > Size.Width)

                {

                    this.Size = new Size(fh.Width + perfilToolStripMenuItem.Size.Width, fh.Height + perfilToolStripMenuItem.Size.Height);

                    this.panel_contenedor.Size  = new Size(fh.Width + perfilToolStripMenuItem.Size.Width, fh.Height + perfilToolStripMenuItem.Size.Height);

                }

                fh.TopLevel = false;

                fh.FormBorderStyle = FormBorderStyle.None;

                fh.Dock = DockStyle.Fill;

                this.panel_contenedor.Controls.Add(fh);

                this.panel_contenedor.Tag = fh;

                fh.Show();

            }

    perfilToolStripMenuItem: Este es un control de menú que utilizo para abrir el Form-Hijo.

     

    Pd: ¿Cómo le hago para poner el las respuestas o preguntas el código con la misma fuente del lenguaje?

    GRACIAS!

    viernes, 11 de noviembre de 2011 5:31
  • Hola.

    :) ¿Cómo le hago para poner el las respuestas o preguntas el código con la misma fuente del lenguaje?

     

    Simple, los foros ahora tienen mejorada la herramienta de insersion de codigo que esta en el panel superior de tu cuadro de respuesta. el tooltip de este dice:

    Insertar bloque de codigo. En la ventana que sale pegas el codigo y seleccionas un lenguaje, luego das vista previa y lo insertas. :)

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes
    viernes, 11 de noviembre de 2011 13:44