How to: Cómo insertar un WinForm dentro de un control TabPanel
🙂
Hoy he visto en el foro de VB una duda que planteaba Tito, acerca de la posibilidad de usar un entorno de formularios hijos dentro de un TabPanel (al estilo del editor de Visual Studio). No es la primera vez que veo esta duda, así que le he dedicado un ratillo y aquí publico una posible solución.
De este modo podemos tener un formulario que actúa como contenedor de otros, pero sin utilizar MDI (que por otra parte me parece ya bastante pasado de moda :-P). La técnica a usar muy sencilla y lo único que hacemos es cada vez que creamos un form, creamos también un objeto TabPage e insertamos el formulario dentro de la nueva pestaña. La única cosa que tenemos que tener en cuenta es establecer la propiedad TopLevel del nuevo formulario ‘hijo’ a False, ya que de otro modo recibiremos un error.
Una muestra:
Private Sub ShowForm()
Dim r As New Random()
Static i As Integer
i += 1
Dim key As String = "f" + i.ToString()
'Crea el nuevo form (copia de form2)
Dim f As New Form2
f.BackColor = Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))
f.Text = String.Format("Nuevo form {0}", i)
'Crea el tab que lo contiene
Me.Tabs.TabPages.Add(key, f.Text)
f.TopLevel = False
f.FormBorderStyle = Windows.Forms.FormBorderStyle.None
f.Dock = DockStyle.Fill
Me.Tabs.TabPages(key).Controls.Add(f)
Me.Tabs.SelectedTab = Me.Tabs.TabPages(key)
'Asigna el nuevo form al tag del tabpage
Me.Tabs.TabPages(key).Tag = f
'Por si desde el propio form quieres cerrar y eliminar el tab
f.Tag = Me.Tabs.TabPages(key)
f.Show()
End Sub
Podeis descargar el proyecto de ejemplo desde:
Y para los que siempre me tiráis los puntosycoma en cara, lo he realizado en VB (eh Jorge? :-D).
Un saludo desde Andorra!
** Modificación (02/07/2008) para agregar un menú contextual a las pestañas **
A petición de Carlos. De este modo es puede cerrar la pestaña actual o todas las pestañas menos la que estamos viendo ahora. El menú es un objeto ContextMenuStrip, de modo que es totalmente extensible para agregar vuestra propia funcionalidad.
La nueva versión está disponible en:
Saludos,
16 Responsesso far
Hola señor muy interesante el post 😀
una consulta como se haria para que aparecira la opcion de cerrar cada pestaña digamos al darle clic secundario a cada una de las pestañas activas, que apareciera la opcion de cerrar dicha pestaña .. :S espero me hallan entendido..
🙂
Gracias … 😀
Buen Post¡¡¡
Felicitaciones , saludos desde Perú
🙂
Gracias Jose,
Carlos: He modificado el código para que muestre un menú con un par de opciones, y de este modo puedan cerrarse las pestañas.
Saludos,
Juer Primi, justo necesitaba estoooooo :))))))))))))))))))))))))
Gracias mil
🙂
Caray que casualidad!!!
Bueno, para esto están los primos, no? 😀
Un abrazo,
Hola Señor Lluis 😀 gracias por responder tan rapido y sobre todo el haber aceptado mi solicitud… :$ :$ 😀 (^^,
Nuevamente reitero las Gracias 😀
Nota: Tengo en cuenta que esto no es un foro, pero si me ayudo bastante 😀 disculpas por las molestias… 😀
Muchas gracias por tu información. Nos ha servido de gran ayuda. Espeso que esto te sirva para seguir ayudando al resto de las personas
SOY NUEVO EN ESTO, ME HA SERVIDO MUCHO LO QUE HAN PUESTO, PERO LO QUE NO HE CONSEGUIDO PONER ES UN BOTON(CERRAR) AL ESTILO EXPLORER O FIREFOX, NO ESTOY HACIENDO UN NAVEGADOR, SOLO LO QUIERO PARA UN PROGRAMA DE LA ESCUELA. SABEN COMO SE HACE? ME SERIA DE GRAN AYUDA!
Que buen post, esto me ha ayudado un monton, es justo lo que estaba intentando hacer.
muchas felicitaciones 😀
Muy bueno, excelente, primer vez que me funciona lago tambien.
felicidades
Bye
Muchas gracias. Me ha sido de gran utilidad.
gracias me sirvio de mucho
Y como seria el codigo en VB .NET 2008 lo pregunto porque el codigo que das no me corre, si pudieras responderme te lo agradesco.
Hola, muy buen ejemplo, pero podrias subir el codigo para Visual Basic 2005, porque creo que esta para Visual Basic 2008, porquie no puedo ejecutarlo.
Gracias
Muy bueno el programa, felicidades
MUY BUEN POST MEN TE PASASTE