Geeks•ms
Todo lo que los geeks de Windows y .Net tienen que contar
Plain Concepts SQL Server Tour

TabControl con algunas mejoras (C# / VB)

100% de gente ha considerado que esto es útil
TabControl con algunas mejoras (C# / VB)

Archivado en: ,, [Editar categorías]

Desde las versiones antiguas de Visual Studio, me he encontrado con un pequeño problema a la hora de trabajar con el TabControl: Ocultar / Mostrar las TabPages.

Pese a que el control TabControl, presenta una propiedad “TabPageCollection” que alberga todas las TabPages del Control, y a su vez cada TabPage tienen unos métodos Hide y Show, su funcionamiento no es el que “yo” desearía. Me explico:

- Si yo llamo al método Hide de un TabPage, me gustaría que este TabPage no fuera visible de cara al usuario.

¿Qué sucede cuando llamo al método Hide?: Puesto que el objeto TabPage, herede del control Panel, el método Hide, se encarga de ocultar el panel que se muestra en el control TabControl y todo su contenido, pero no la cabecera de la “pestaña”.

Del mismo modo el método Show() lo que va a realizar es mostrar su contenido.

Por ello, he creado un control de Usuario para implementar los métodos HideTabPage y ShowTabPage.

Para poder realizar estos métodos he creado una lista privada para manejar las “TabPages”:

List<TabPage> AllTabPages;

Para su correcto funcionamiento, en el Constructor de la Clase, inicializo la lista:

AllTabPages = new List<TabPage>();

Y ya se puede implementar la funcionalidad:

public void HideTabPage(TabPage tb)        

{

            if (TabPages.Contains(tb))            

             {

                foreach (TabPage t in TabPages)

                {

                    if (!AllTabPages.Contains(t))

                        AllTabPages.Add(t);

                }               

  this.TabPages.Remove(tb);            

}  

       }

public void ShowTabPage(TabPage tb)

       {

           if ((AllTabPages.Contains(tb)) && (!TabPages.Contains(tb)))

               this.TabPages.Add(tb);

       }

Para su utilización bastaría con hacer una llamada de la siguiente manera:

extTabControl1.HideTabPage(TabPage1);

o

extTabControl1.ShowTabPage(TabPage1);

 

Además de Ocultar y Mostrar un TabPage, he generado la posibilidad de Habilitar / Deshabilitar TabPages y que el control no entre en TabPages Deshabilitadas. Para lograrlo he sobrescrito el método Selecting del control:

protected override void OnSelecting(TabControlCancelEventArgs e)      

  {         

   if (e.TabPageIndex > -1)          

  {

               TabPage tb = TabPages[e.TabPageIndex];

               if (tb.Enabled == false)

                   e.Cancel = true;

               else

                   base.OnSelecting(e);

           }

       }

 

Os dejo el enlace a CodePlex donde lo he publicado.

Si tenéis cualquier duda, aquí estoy.

Saludos

Comentarios Recientes

Por: lazartehernan Publicado en 30/12/2011 12:36

Me resultó muy útil tu aporte. Gracias!

Sigue a Plain Concepts en Twitter