c# - ocultar - vb net tabcontrol hide tab page
Deshabilita y oculta un TabPage (10)
Esta pregunta ya tiene una respuesta aquí:
¿Cómo puedo hacer que un TabPage
en un TabControl
visible / oculto y habilitado / deshabilitado?
¿Qué tabPage.Visible
propiedades tabPage.Enabled
y tabPage.Visible
?
Para su información: http://msdn.microsoft.com/en-us/library/8fb09fh2.aspx
Basado en la respuesta de @Otiel, hice esas dos funciones:
Para alternar la visibilidad:
bool toggleTabPageVisibility(TabControl tc, TabPage tp)
{
//if tp is already visible
if (tc.TabPages.IndexOf(tp) > -1)
{
tc.TabPages.Remove(tp);
//no pages to show, hide tabcontrol
if(tc.TabCount == 0)
{
tc.Visible = false;
}
return false;
}
//if tp is not visible
else
{
tc.TabPages.Insert(tc.TabCount, tp);
//guarantee tabcontrol visibility
tc.Visible = true;
tc.SelectTab(tp);
return true;
}
}
Para establecer la visibilidad:
void setTabPageVisibility(TabControl tc, TabPage tp, bool visibility)
{
//if tp is not visible and visibility is set to true
if ((visibility == true) && (tc.TabPages.IndexOf(tp) <= -1))
{
tc.TabPages.Insert(tc.TabCount, tp);
//guarantee tabcontrol visibility
tc.Visible = true;
tc.SelectTab(tp);
}
//if tp is visible and visibility is set to false
else if ((visibility == false) && (tc.TabPages.IndexOf(tp) > -1))
{
tc.TabPages.Remove(tp);
//no pages to show, hide tabcontrol
if(tc.TabCount == 0)
{
tc.Visible = false;
}
}
//else do nothing
}
Coloque la tabpage
en el panel
y oculte el panel
usando
this.panel1.visible=false;
¡Está funcionando para mí!
Es posible que falte lo obvio porque ninguno de los siguientes elimina / cambia el aspecto de la pestaña
tabPage1.Enabled = false; // this disables the controls on it
tabPage1.Visible = false; // this hides the controls on it.
Tampoco elimine la pestaña de la lista en la parte superior.
No sé sobre habilitar / deshabilitar (tal vez intente deshabilitar todos los controles en él). Si desea que estén ocultos, simplemente elimínelos de la colección de artículos. Si desea que sean visibles nuevamente, puede agregarlos nuevamente al control. Sin embargo, tendrá que ocuparse de su orden (almacenar sus referencias en alguna lista, o puede tener dos listas que contengan referencias a las TabPages visibles y las que no).
Podemos habilitar o deshabilitar las páginas de TABPAGE.ENABLE=true
utilizando TABPAGE.ENABLE=true
y TABPAGE.ENABLE=FALSE
.
pero la propiedad visible no se puede aplicar a tabpages. Podemos hacerlo en lugar de propiedad visible, podemos hacerlo de esta manera.
private void HideTabPage(TabPage tp)
{
if (tabControl1.TabPages.Contains(tp))
tabControl1.TabPages.Remove(tp);
}
private void ShowTabPage(TabPage tp)
{
ShowTabPage(tp, tabControl1.TabPages.Count);
}
private void ShowTabPage(TabPage tp , int index)
{
if (tabControl1.TabPages.Contains(tp)) return;
InsertTabPage(tp, index);
}
private void InsertTabPage(TabPage tabpage, int index)
{
if (index < 0 || index > tabControl1.TabCount)
throw new ArgumentException("Index out of Range.");
tabControl1.TabPages.Add(tabpage);
if (index < tabControl1.TabCount - 1)
do
{
SwapTabPages(tabpage, (tabControl1.TabPages[tabControl1.TabPages.IndexOf(tabpage) - 1]));
}
while (tabControl1.TabPages.IndexOf(tabpage) != index);
tabControl1.SelectedTab = tabpage;
}
private void SwapTabPages(TabPage tp1, TabPage tp2)
{
if (tabControl1.TabPages.Contains(tp1) == false ||tabControl1.TabPages.Contains(tp2) == false)
throw new ArgumentException("TabPages must be in the TabControls TabPageCollection.");
int Index1 = tabControl1.TabPages.IndexOf(tp1);
int Index2 = tabControl1.TabPages.IndexOf(tp2);
tabControl1.TabPages[Index1] = tp2;
tabControl1.TabPages[Index2] = tp1;
tabControl1.SelectedIndex = tabControl1.SelectedIndex;
string tp1Text, tp2Text;
tp1Text = tp1.Text;
tp2Text = tp2.Text;
tp1.Text=tp2Text;
tp2.Text=tp1Text;
}
También tuve esta pregunta. tabPage.Visible no se implementó como se indicó anteriormente, lo cual fue de gran ayuda (+1). Descubrí que puedes anular el control y esto funcionará. Un poco de necroposting, pero pensé en publicar mi solución aquí para otros ...
[System.ComponentModel.DesignerCategory("Code")]
public class MyTabPage : TabPage
{
private TabControl _parent;
private bool _isVisible;
private int _index = int.MinValue;
public new bool Visible
{
get { return _isVisible; }
set
{
if (_parent == null) _parent = this.Parent as TabControl;
if (_parent == null) return;
if (_index < 0) _index = _parent.TabPages.IndexOf(this);
if (value && !_parent.TabPages.Contains(this))
{
if (_index > 0 && _index < _parent.TabPages.Count) _parent.TabPages.Insert(_index, this);
else _parent.TabPages.Add(this);
}
else if (!value && _parent.TabPages.Contains(this)) _parent.TabPages.Remove(this);
_isVisible = value;
base.Visible = value;
}
}
protected override void InitLayout()
{
base.InitLayout();
_parent = Parent as TabControl;
}
}
// Hide TabPage and Remove the Header
this.tabPage1.Hide();
this.tabPage3.Hide();
this.tabPage5.Hide();
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage3);
tabControl1.TabPages.Remove(tabPage5);
// Show TabPage and Visible the Header
tabControl1.TabPages.Insert(0,tabPage1);
tabControl1.TabPages.Insert(2, tabPage3);
tabControl1.TabPages.Insert(4, tabPage5);
this.tabPage1.Show();
this.tabPage3.Show();
this.tabPage5.Show();
tabControl1.SelectedTab = tabPage1;
//Move&Add is not good answer
this.tabPage1.Parent = null; // hide
this.tabPage1.Parent = this.tabControl1; //show
Habilitar deshabilitar
El
tabPage.Enabled
parece estar funcionando bien, pero está marcado como "para no ser utilizado":Esta API es compatible con la infraestructura de .NET Framework y no está diseñada para ser utilizada directamente desde su código.
Este miembro no es significativo para este control.Por lo tanto, debe deshabilitar la página de la pestaña deshabilitando todos los controles en la pestaña. Vea this por ejemplo.
Mostrar ocultar
Hay una propiedad
tabPage.Visible
existente pero no parece tener ningún efecto. Además, también está marcado como "para no ser utilizado", y msdn recomienda eliminar la página de la pestaña del control de la pestaña para ocultarla:// Hide the tab page tabControl.TabPages.Remove(tabPage1); // Show the tab page (insert it to the correct position) tabControl.TabPages.Insert(0, tabPage1);