<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>TabControl con algunas mejoras (C# / VB)</title><link>http://geeks.ms/wikis/arquitecturasoftware/tabcontrol-con-algunas-mejoras-c-vb.aspx</link><description>Wiki sobre Arquitectura del software</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>TabControl con algunas mejoras (C# / VB)</title><link>http://geeks.ms/wikis/arquitecturasoftware/tabcontrol-con-algunas-mejoras-c-vb.aspx</link><pubDate>Mon, 18 Oct 2010 14:29:34 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:27</guid><dc:creator>Javier Torrecilla</dc:creator><comments>http://geeks.ms/wikis/arquitecturasoftware/tabcontrol-con-algunas-mejoras-c-vb/comments.aspx</comments><description>Revisión actual enviado a Wiki sobre Arquitectura del software en Geeks•ms por Javier Torrecilla a 10/18/2010 4:29:34 PM&lt;br /&gt;
&lt;p&gt;
Desde las versiones antiguas de Visual Studio, me he encontrado con un peque&amp;ntilde;o problema a la hora de trabajar con el TabControl: Ocultar / Mostrar las TabPages.&lt;/p&gt;
&lt;p&gt;
Pese a que el control TabControl, presenta una propiedad &amp;ldquo;TabPageCollection&amp;rdquo; que alberga todas las TabPages del Control, y a su vez cada TabPage tienen unos m&amp;eacute;todos Hide y Show, su funcionamiento no es el que &amp;ldquo;yo&amp;rdquo; desear&amp;iacute;a. Me explico:&lt;/p&gt;
&lt;p&gt;
- Si yo llamo al m&amp;eacute;todo Hide de un TabPage, me gustar&amp;iacute;a que este TabPage no fuera visible de cara al usuario. &lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;
&amp;iquest;Qu&amp;eacute; sucede cuando llamo al m&amp;eacute;todo Hide?: Puesto que el objeto &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.tabpage.aspx" target="_blank"&gt;TabPage&lt;/a&gt;, herede del control &lt;a href="http://msdn.microsoft.com/es-es/library/system.windows.forms.panel.aspx" target="_blank"&gt;Panel&lt;/a&gt;, el m&amp;eacute;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 &amp;ldquo;pesta&amp;ntilde;a&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;
Del mismo modo el m&amp;eacute;todo Show() lo que va a realizar es mostrar su contenido.&lt;/p&gt;
&lt;p&gt;
Por ello, he creado un control de Usuario para implementar los m&amp;eacute;todos HideTabPage y ShowTabPage.&lt;/p&gt;
&lt;p&gt;
Para poder realizar estos m&amp;eacute;todos he creado una lista privada para manejar las &amp;ldquo;TabPages&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
List&amp;lt;TabPage&amp;gt; AllTabPages;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Para su correcto funcionamiento, en el Constructor de la Clase, inicializo la lista:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
AllTabPages = new List&amp;lt;TabPage&amp;gt;();&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Y ya se puede implementar la funcionalidad:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
public void HideTabPage(TabPage tb)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;{
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (TabPages.Contains(tb))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (TabPage t in TabPages)&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!AllTabPages.Contains(t))
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllTabPages.Add(t);
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; this.TabPages.Remove(tb);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt; }
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;/p&gt;
&lt;p&gt;
public void ShowTabPage(TabPage tb)&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((AllTabPages.Contains(tb)) &amp;amp;&amp;amp; (!TabPages.Contains(tb)))
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.TabPages.Add(tb);  &lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Para su utilizaci&amp;oacute;n bastar&amp;iacute;a con hacer una llamada de la siguiente manera:  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
extTabControl1.HideTabPage(TabPage1);  &lt;/p&gt;
&lt;p&gt;
o  &lt;/p&gt;
&lt;p&gt;
extTabControl1.ShowTabPage(TabPage1);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
Adem&amp;aacute;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&amp;eacute;todo &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.selecting.aspx" target="_blank"&gt;Selecting&lt;/a&gt; del control:  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
protected override void OnSelecting(TabControlCancelEventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; if (e.TabPageIndex &amp;gt; -1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; {
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TabPage tb = TabPages[e.TabPageIndex];&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tb.Enabled == false)&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = true;&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.OnSelecting(e);&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Os dejo el enlace a &lt;a href="http://extendedtabcontrol.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt; donde lo he publicado.&lt;/p&gt;
&lt;p&gt;
Si ten&amp;eacute;is cualquier duda, aqu&amp;iacute; estoy.&lt;/p&gt;
&lt;p&gt;
Saludos&lt;/p&gt;</description></item></channel></rss>