MSMVPS.COM
The Ultimate Destination for Blogs by Current and Former Microsoft Most Valuable Professionals.

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

El blog de Lluis Franco

Syndication

:-)
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,

** crossposting desde el blog de Lluís Franco en geeks.ms **

Posted Jul 01 2008, 01:10 PM by lfranco
Filed under: , , , ,

Add a Comment

(required)  
(optional)
(required)  
Remember Me?


Copyright © is the original authors. Blog site is an independent site not sponsored by Microsoft. The Yoda blog server and the Brianna SQL server would like to thank www.ownwebnow.com and www.exchangedefender.com. They wouldn't be here and broadcasting without the generosity of Vlad Mazek and his companies.

Powered by Community Server (Commercial Edition), by Telligent Systems