lunes, 18 de octubre de 2010

CODEPLEX: TabControl con mejoras

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í me estoy.

Saludos

4 comentarios:

  1. Hola Javier, veo que tu control es muy util, pero aún no puedo usarlo, cuando intento añadirlo al ToolBox, este me muestra un mensaje de error notificandome que: "ExtControls.dll no es un módulo de Microsoft .NET", yo utilizo VS2008, espero puedas darme una luz..

    Gracias, Kiara!!

    ResponderEliminar
  2. Hola,

    Lo que puedes hacer es descargar el código fuente y crear una clase similar, el código que yo use está en c# pero si tienes algun problema para convertirlo, avisame, de todas formas, este blog lo tengo dejado, me puedes visitar en http://geeks.ms/blogs/jtorrecilla/default.aspx

    ResponderEliminar
  3. hola javier.. estoy tratando de utilizar tu control y aun no puedo ...

    saludos.. Mario

    ResponderEliminar
  4. Saludos. Añadí la libreria pero no consigo acceder a los métodos

    ResponderEliminar