Comment rendre une TabPage
dans une TabControl
visible/masqué et activé/désactivé?
Vous manquez peut-être l'évidence, car aucun des éléments suivants ne supprime/modifie l'apparence de l'onglet
tabPage1.Enabled = false; // this disables the controls on it
tabPage1.Visible = false; // this hides the controls on it.
Ni supprimer l'onglet de la liste en haut.
Activer désactiver
Le tabPage.Enabled
semble fonctionner correctement, mais porte la mention "à ne pas utiliser":
Cette API prend en charge l'infrastructure .NET Framework et n'est pas conçue pour être utilisée directement à partir de votre code.
Ce membre n'est pas significatif pour ce contrôle.
Vous devez donc désactiver la page à onglet en désactivant tous les contrôles de l’onglet. Voir this par exemple.
Afficher/masquer
Il existe une propriété tabPage.Visible
mais elle ne semble pas avoir d’effet. En outre, il est également marqué "à ne pas utiliser" et msdn conseille de supprimer la page à onglet du contrôle onglet afin de la masquer:
// Hide the tab page
tabControl.TabPages.Remove(tabPage1);
// Show the tab page (insert it to the correct position)
tabControl.TabPages.Insert(0, tabPage1);
J'ai aussi eu cette question. tabPage.Visible n'est pas implémenté comme indiqué précédemment, ce qui était d'une grande aide (+1). J'ai trouvé que vous pouvez remplacer le contrôle et cela fonctionnera. Un peu de nécropostage, mais j'ai pensé poster ma solution ici pour les autres ...
[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;
}
}
//Move&Add is not good answer
this.tabPage1.Parent = null; // hide
this.tabPage1.Parent = this.tabControl1; //show
Je ne sais pas sur activer/désactiver (peut-être essayer de désactiver tous les contrôles sur elle). Si vous souhaitez les masquer, supprimez-les simplement de la collection Items. Si vous souhaitez les voir à nouveau, vous pouvez les rajouter au contrôle. Néanmoins, vous devrez faire attention à leur ordre (enregistrez leurs références dans une liste, ou vous pouvez avoir deux listes contenant des références à ces TabPages visibles et à celles qui ne le sont pas).
nous pouvons activer ou désactiver les pages à onglet en utilisant TABPAGE.ENABLE=true
et TABPAGE.ENABLE=FALSE
.
mais la propriété visible ne peut pas être appliquée à tabpages.we peut au lieu de la propriété visible, nous pouvons faire comme ceci.
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;
}
// 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;
Mettez tabpage
dans panel
et cachez panel
en utilisant
this.panel1.visible=false;
Ça marche pour moi !
Basé sur la réponse de @ Otiel, j'ai effectué ces deux fonctions:
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;
}
}
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
}
Qu'en est-il des propriétés tabPage.Enabled
et tabPage.Visible
?
Pour votre information: http://msdn.Microsoft.com/en-us/library/8fb09fh2.aspx