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
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..
ResponderEliminarGracias, Kiara!!
Hola,
ResponderEliminarLo 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
hola javier.. estoy tratando de utilizar tu control y aun no puedo ...
ResponderEliminarsaludos.. Mario
Saludos. Añadí la libreria pero no consigo acceder a los métodos
ResponderEliminarmuy bueno funciona corectamente
ResponderEliminar