Cómo contener un formulario dentro de un panel en VB.Net con Windows Forms

Kevin Figueroa
Kevin Figueroa
4 min readDec 1, 2017

--

Hey, ¿qué tal, programadores?; el día de hoy vamos a ver cómo contener un formulario dentro de otro, gracias a un panel, usando un formulario como visualizador y los demás aparecerán adentro del panel, como si fueran transiciones dentro del mismo formulario.

Para empezar necesitamos dos o más formularios, en mi caso el primero se llamará “Main” y el segundo “F2”.

Main
F2

Es muy importante que los otros formularios (en mi caso F2) tengan la propiedad de FormBorderStyle en “None”, de lo contrario se verán dos barras de título, lo cual le quita estética al programa.

En el formulario Main vamos a crear un panel, recomiendo que esté anclado, de manera que llene el formulario, y los demás objetos estén encima del panel. Por cierto, el Panel tiene que tener la propiedad Visible en False.

Ahora en Main, vamos a crear un nuevo evento de algún objeto, por ejemplo, click (En mi caso es en un botón con el evento click)

Hacemos que nuestro panel sea visible:

Panel1.Visible = True

Ahora, después de la clase Main pondremos el siguiente código:

Dim Cálculos As F2

También lo podemos poner en el evento que creamos anteriormente, eso lo dejo a su elección. Con esto crearemos una variable llamada “Cálculos”, la cual va a ser la representación de F2, dentro de Main.

Ahora sí, dentro del evento vamos a escribir el siguiente código:

Cálculos = New F2

Esto hace que la variable Cálculos sea una copia idéntica de F2.

Ahora vamos a hacer que “Cálculos” sea de nivel inferior, poniendo la propiedad TopLevel en falso.

Cálculos.TopLevel = False

Y agregamos “Cálculos” a nuestro panel:

Me.Panel1.Controls.Add(Cálculos)

También si desean pueden cambiar el texto del formulario (El que se muestra en la barra de título).

Ahora viene la parte más… complicada, por así decirlo. Y es que tenemos que irnos a nuestro formulario F2, y ver la propiedad size:

Entonces, chequeamos la anchura y largo:

A la anchura (Width) le tenemos que sumar 16, y a al largo (Height) le sumamos 39. Entonces el nuevo tamaño (en mi caso) sería de “397; 194”. Estos cambios son necesarios para que se muestre todo el contenido del formulario, debido a que F2 en su propiedad FormBorderStyle (Que define el tipo de borde) está en None, así que no se incluye el tamaño de la barra de título, entonces si sólo copiamos el tamaño original… nos saldrá incompleto. Por ello la suma. Ahora vamos a hacer que Main sea de ese tamaño (397; 194)

A continuación vamos a hacer que “Cálculos” sea visible dentro de nuestro panel:

Cálculos.Show()

Y por último, hacemos que los objetos que colocamos encima del panel (En mi caso sólo es un botón) se oculten.

Este es todo el código que acabamos de usar, pero junto.

Bien, ahora vamos a irnos a nuestro formulario F2, y en el botón volver vamos a hacer que Main vuelva a su forma original. Si cambiaron el texto del formulario, tienen que poner el que tenía (en mi caso era “Main”):

Main.Text = "Main

Ocultamos F2 del panel (Sí, es F2, porque el botón que estamos editando es el de F2):

Me.Hide()

Ahora, ocultamos el panel (El que está en Main, claro):

Main.Panel1.Visible = False

Luego, nos vamos a la propiedad size, pero de Main, y copiamos los valores originales, obviamente cambiando el “;” por “,”(en mi caso el tamaño original es de 259; 158); Acá ya no se necesita hacer cambios, ya que el tamaño sólo afecta al interior del formulario, no a los bordes. Hacemos que Main tome ese nuevo tamaño:

Main.Size = New Size(259, 158)

Y por último, hacemos que los objetos que estaban encima de nuestro panel, vuelvan a aparecer:

Main.Button1.Visible = True
Este sería todo el código de F2 en conjunto.

¡Bien! Ahora ya podemos compilar y ejecutar nuestro programa.

El resultado final tendría que ser similar a esto.

Esto ha sido todo. Espero haber sido de ayuda. Recuerda, todo depende de cómo ejecutes una idea. Yo soy Kevin Figueroa, y nos vemos en la próxima oportunidad.

--

--

Kevin Figueroa
Kevin Figueroa

Soy un programador, escritor y dibujante en proceso. Comparto información sobre informática, geografía e inclusive opiniones personales. Hablo español e inglés.