Lluís Franco on Geeks.ms
  • Home

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

  • By lfranco
  • Jul-1-2008
  • Sin categoría
  • 16 Comments.

🙂
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.

FormInTabPanel 

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.

FormInTabPanel_Menu

La nueva versión está disponible en:

Saludos,

Comments

16 Responsesso far

  1. anonymous dice:
    1 julio, 2008 a las 8:49 pm

    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 … 😀

    Responder
  2. anonymous dice:
    2 julio, 2008 a las 1:49 am

    Buen Post¡¡¡
    Felicitaciones , saludos desde Perú

    Responder
  3. lfranco dice:
    2 julio, 2008 a las 10:37 am

    🙂
    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,

    Responder
  4. anonymous dice:
    2 julio, 2008 a las 10:50 am

    Juer Primi, justo necesitaba estoooooo :))))))))))))))))))))))))

    Gracias mil

    Responder
  5. lfranco dice:
    2 julio, 2008 a las 10:53 am

    🙂
    Caray que casualidad!!!
    Bueno, para esto están los primos, no? 😀

    Un abrazo,

    Responder
  6. anonymous dice:
    2 julio, 2008 a las 3:27 pm

    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… 😀

    Responder
  7. anonymous dice:
    25 septiembre, 2008 a las 1:26 pm

    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

    Responder
  8. anonymous dice:
    1 diciembre, 2008 a las 4:43 pm

    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!

    Responder
  9. anonymous dice:
    19 diciembre, 2008 a las 7:56 pm

    Que buen post, esto me ha ayudado un monton, es justo lo que estaba intentando hacer.
    muchas felicitaciones 😀

    Responder
  10. anonymous dice:
    10 diciembre, 2009 a las 8:44 pm

    Muy bueno, excelente, primer vez que me funciona lago tambien.
    felicidades
    Bye

    Responder
  11. anonymous dice:
    27 diciembre, 2009 a las 7:20 pm

    Muchas gracias. Me ha sido de gran utilidad.

    Responder
  12. anonymous dice:
    23 febrero, 2010 a las 3:35 am

    gracias me sirvio de mucho

    Responder
  13. anonymous dice:
    27 febrero, 2010 a las 4:44 pm

    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.

    Responder
  14. anonymous dice:
    28 febrero, 2010 a las 4:00 pm

    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

    Responder
  15. anonymous dice:
    8 marzo, 2010 a las 6:50 pm

    Muy bueno el programa, felicidades

    Responder
  16. anonymous dice:
    15 abril, 2010 a las 10:48 am

    MUY BUEN POST MEN TE PASASTE

    Responder

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

← Previous Post Next Post →

Tags

async Back best practices

Entradas recientes

  • Video de mi charla en la #dotNetSpain2016
  • I’m back. Miss me?
  • Office365 actualizado a 2013 para nuevas suscripciones
  • Serializar listas genéricas en aplicaciones WinRT
  • [TPL] Problemas de concurrencia

Comentarios recientes

  • Darling Chavez en Tip: Mostrar objetos relacionados en DevExpress GridControl
  • Alexander en [TPL] Problemas de concurrencia
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • cristinakity en Funciones escalares en TSQL, JOINS, CROSS APPLY, y la madre que parió al topo.
  • anonymous en HowTo: Crear una pantalla de inicio (splash screen)

Archivos

  • marzo 2016
  • marzo 2013
  • octubre 2012
  • septiembre 2012
  • agosto 2012
  • febrero 2012
  • diciembre 2011
  • noviembre 2011
  • octubre 2011
  • septiembre 2011
  • agosto 2011
  • junio 2011
  • mayo 2011
  • abril 2011
  • febrero 2011
  • enero 2011
  • diciembre 2010
  • noviembre 2010
  • octubre 2010
  • agosto 2010
  • julio 2010
  • marzo 2010
  • febrero 2010
  • enero 2010
  • diciembre 2009
  • noviembre 2009
  • octubre 2009
  • septiembre 2009
  • agosto 2009
  • julio 2009
  • junio 2009
  • mayo 2009
  • abril 2009
  • marzo 2009
  • febrero 2009
  • enero 2009
  • diciembre 2008
  • noviembre 2008
  • octubre 2008
  • septiembre 2008
  • agosto 2008
  • julio 2008
  • junio 2008
  • mayo 2008
  • abril 2008
  • marzo 2008
  • febrero 2008
  • enero 2008
  • diciembre 2007
  • noviembre 2007
  • octubre 2007
  • septiembre 2007
  • agosto 2007
  • abril 2007
  • febrero 2007
  • enero 2007

Categorías

  • .NET
  • C#
  • Channel9
  • Evento
  • Personal
  • Videos

Meta

  • Acceder
  • RSS de las entradas
  • RSS de los comentarios
  • WordPress.org
About This Site

A cras tincidunt, ut tellus et. Gravida scel ipsum sed iaculis, nunc non nam. Placerat sed phase llus, purus purus elit.

Archives Widget
  • January 2010
  • December 2009
  • November 2009
  • October 2009
Categories
  • Entertainment
  • Technology
  • Sports & Recreation
  • Jobs & Lifestyle
Search
  • facebook
  • twitter
  • rss

Powered by WordPress  |  Business Directory by InkThemes.

This site uses cookies: Find out more.