Comment masquer TabPage de TabControl dans WinForms 2.0?
Non, cela n’existe pas. Vous devez supprimer l’onglet et le rappend quand vous le souhaitez. Ou utilisez un autre contrôle d’onglet (tiers).
Extrait de code pour masquer une page de tabulation
private void HideTab1_Click(object sender, EventArgs e) { tabControl1.TabPages.Remove(tabPage1); }
Extrait de code pour afficher une page de tabulation
private void ShowTab1_Click(object sender, EventArgs e) { tabControl1.TabPages.Add(tabPage1); }
La propriété Visiblity n’a pas été implémentée sur les tabs et il n’y a pas non plus de méthode Insert.
Vous devez insérer et supprimer manuellement des pages à onglet.
Voici un travail autour de la même chose.
http://www.dotnetspider.com/resources/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx
Je me rends compte que la question est ancienne et la réponse acceptée est ancienne, mais …
Au moins dans .NET 4.0 …
Pour masquer un onglet:
tabControl.TabPages.Remove(tabPage);
Pour le remettre:
tabControl.TabPages.Insert(index, tabPage);
TabPages
fonctionne beaucoup mieux que les Controls
pour cela.
Pour éviter les klikering visuels, vous devrez peut-être utiliser:
bindingSource.RaiseListChangeEvent = false
ou
myTabControl.RaiseSelectedIndexChanged = false
Supprimer une page d’onglet:
myTabControl.Remove(myTabPage);
Ajouter une page à onglet:
myTabControl.Add(myTabPage);
Insérer une page à onglet à un emplacement spécifique:
myTabControl.Insert(2, myTabPage);
N’oubliez pas d’inverser les changements:
bindingSource.RaiseListChangeEvent = true;
ou
myTabControl.RaiseSelectedIndexChanged = true;
myTabPage.parent = null; myTabPage.parent = myTabControl;
Les solutions fournies jusqu’à présent sont bien trop compliquées. Lisez la solution la plus simple à l’ adresse : http://www.codeproject.com/Questions/614157/How-to-Hide-TabControl-Headers
Vous pouvez utiliser cette méthode pour les rendre invisibles lors de l’exécution:
private void HideAllTabsOnTabControl(TabControl theTabControl) { theTabControl.Appearance = TabAppearance.FlatButtons; theTabControl.ItemSize = new Size(0, 1); theTabControl.SizeMode = TabSizeMode.Fixed; }
Créez une nouvelle classe vide et passez-la à l’intérieur:
using System.Windows.Forms; namespace ExtensionMethods { public static class TabPageExtensions { public static bool IsVisible(this TabPage tabPage) { if (tabPage.Parent == null) return false; else if (tabPage.Parent.Contains(tabPage)) return true; else return false; } public static void HidePage(this TabPage tabPage) { TabControl parent = (TabControl)tabPage.Parent; parent.TabPages.Remove(tabPage); } public static void ShowPageInTabControl(this TabPage tabPage,TabControl parent) { parent.TabPages.Add(tabPage); } } }
2- Ajoutez une référence à l’espace de noms ExtensionMethods dans votre code de formulaire:
using ExtensionMethods;
3- Maintenant, vous pouvez utiliser yourTabPage.IsVisible();
pour vérifier sa visibilité, yourTabPage.HidePage();
pour le cacher, et yourTabPage.ShowPageInTabControl(parentTabControl);
pour le montrer
private System.Windows.Forms.TabControl _tabControl; private System.Windows.Forms.TabPage _tabPage1; private System.Windows.Forms.TabPage _tabPage2; ... // Initialise the controls ... // "hides" tab page 2 _tabControl.TabPages.Remove(_tabPage2); // "shows" tab page 2 // if the tab control does not contain tabpage2 if (! _tabControl.TabPages.Contains(_tabPage2)) { _tabControl.TabPages.Add(_tabPage2); }
J’ai combiné la réponse de @Jack Griffin et celle de @amazedsaint ( respectivement l’extrait de code dotnetspider ) en un seul TabControlHelper .
Le TabControlHelper vous permet de:
public class TabControlHelper { private TabControl _tabControl; private List> _pagesIndexed; public TabControlHelper(TabControl tabControl) { _tabControl = tabControl; _pagesIndexed = new List>(); for (int i = 0; i < tabControl.TabPages.Count; i++) { _pagesIndexed.Add(new KeyValuePair (tabControl.TabPages[i], i )); } } public void HideAllPages() { for (int i = 0; i < _pagesIndexed.Count; i++) { _tabControl.TabPages.Remove(_pagesIndexed[i].Key); } } public void ShowAllPages() { for (int i = 0; i < _pagesIndexed.Count; i++) { _tabControl.TabPages.Add(_pagesIndexed[i].Key); } } public void HidePage(TabPage tabpage) { if (!_tabControl.TabPages.Contains(tabpage)) return; _tabControl.TabPages.Remove(tabpage); } public void ShowPage(TabPage tabpage) { if (_tabControl.TabPages.Contains(tabpage)) return; InsertTabPage(GetTabPage(tabpage).Key, GetTabPage(tabpage).Value); } private void InsertTabPage(TabPage tabpage, int index) { if (index < 0 || index > _tabControl.TabCount) throw new ArgumentException("Index out of Range."); _tabControl.TabPages.Add(tabpage); if (index < _tabControl.TabCount - 1) do { SwapTabPages(tabpage, (_tabControl.TabPages[_tabControl.TabPages.IndexOf(tabpage) - 1])); } while (_tabControl.TabPages.IndexOf(tabpage) != index); _tabControl.SelectedTab = tabpage; } private void SwapTabPages(TabPage tabpage1, TabPage tabpage2) { if (_tabControl.TabPages.Contains(tabpage1) == false || _tabControl.TabPages.Contains(tabpage2) == false) throw new ArgumentException("TabPages must be in the TabControls TabPageCollection."); int Index1 = _tabControl.TabPages.IndexOf(tabpage1); int Index2 = _tabControl.TabPages.IndexOf(tabpage2); _tabControl.TabPages[Index1] = tabpage2; _tabControl.TabPages[Index2] = tabpage1; } private KeyValuePair GetTabPage(TabPage tabpage) { return _pagesIndexed.Where(p => p.Key == tabpage).First(); } }
public static Action> GetTabHider(this TabControl container) { if (container == null) throw new ArgumentNullException("container"); var orderedCache = new List(); var orderedEnumerator = container.TabPages.GetEnumerator(); while (orderedEnumerator.MoveNext()) { var current = orderedEnumerator.Current as TabPage; if (current != null) { orderedCache.Add(current); } } return (Func where) => { if (where == null) throw new ArgumentNullException("where"); container.TabPages.Clear(); foreach (TabPage page in orderedCache) { if (where(page)) { container.TabPages.Add(page); } } }; }
Utilisez-le comme ceci:
var hider = this.TabContainer1.GetTabHider(); hider((tab) => tab.Text != "tabPage1"); hider((tab) => tab.Text != "tabpage2");
L’ordre d’origine des tabs est conservé dans une liste complètement masquée dans la fonction anonyme. Conservez une référence à l’instance de la fonction et conservez l’ordre de tabulation d’origine.
vous pouvez définir le parent de la page de tabulation sur null pour le masquer et afficher simplement définir le parent de la page de tabulation sur le tabcontrol
Eh bien, si vous ne voulez pas gâcher du code existant et que vous souhaitez simplement masquer un onglet, vous pouvez modifier le code généré par le compilateur pour commenter la ligne qui ajoute l’onglet à l’onglet.
Par exemple: La ligne suivante ajoute un onglet nommé “readformatcardpage” à un contrôle de tabulation nommé “tabcontrol”
this.tabcontrol.Controls.Add (this.readformatcardpage);
Ce qui suit empêchera l’ajout de l’onglet au contrôle tabulaire
// cette.tabcontrol.Controls.Add(this.creadformatcardpage);
Comme travail à bas prix, j’ai utilisé une étiquette pour couvrir les tabs que je voulais cacher.
Nous pouvons alors utiliser le support visible de l’étiquette comme substitut. Si quelqu’un va dans cette voie, n’oubliez pas de gérer les coups de clavier ou les événements de visibilité. Vous ne voudriez pas que les touches fléchées gauche-droite exposent l’onglet que vous essayez de masquer.
Pas sûr de “Winforms 2.0” mais ceci est prouvé et éprouvé:
http://www.mostthingsweb.com/2011/01/hiding-tab-headers-on-a-tabcontrol-in-c/
Dans WPF, c’est assez facile:
En supposant que vous avez donné un nom au TabItem, par exemple,
Vous pourriez avoir les éléments suivants dans le code derrière le formulaire:
if (user.AccessLevel == AccessLevelEnum.Admin) { adminTab.Visibility = System.Windows.Visibility.Visible; }
Il convient de noter qu’un object user
nommé user
a été créé avec sa propriété AccessLevel
définie sur l’une des valeurs d’énumération définies par l’utilisateur d’ AccessLevelEnum
… peu importe. c’est juste une condition par laquelle je décide de montrer l’onglet ou non.
J’ai aussi eu cette question. tabPage.Visible n’est pas implémenté comme indiqué précédemment, ce qui était une aide précieuse (+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; 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) _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; } }
TabPage pageListe, pageDetay; bool isDetay = false; private void btnListeDetay_Click(object sender, EventArgs e) { if (isDetay) { isDetay = false; tc.TabPages.Remove(tpKayit); tc.TabPages.Insert(0,pageListe); } else { tc.TabPages.Remove(tpListe); tc.TabPages.Insert(0,pageDetay); isDetay = true; } }
J’ai utilisé la même approche mais le problème est que lorsque la page à onglet a été supprimée de la liste TabPages de contrôle onglet, elle est également supprimée de la liste des contrôles de la page à onglet. Et il n’est pas disposé lorsque la forme est éliminée.
Donc, si vous avez beaucoup de pages à onglet “cachées”, vous pouvez obtenir une erreur de dépassement du quota de gestionnaire Windows et seul le redémarrage de l’application le corrigera.
Si vous parlez de AjaxTabControlExtender, définissez ensuite TabIndex sur chaque onglet et définissez la propriété Visible True / False en fonction de vos besoins.
myTab.Tabs [1] .Visible = true / false;
+1 pour microsoft :-).
J’ai réussi à le faire de cette façon:
(cela suppose que vous avez un bouton ‘Next’ qui affiche la page suivante – tabSteps est le nom du contrôle Onglet)
Au démarrage, enregistrez toutes les tabs dans une liste appropriée. Lorsque l’utilisateur appuie sur le bouton Suivant, supprimez toutes les tabs du contrôle onglet, puis ajoutez-le avec l’index approprié:
int step = -1; List savedTabPages; private void FMain_Load(object sender, EventArgs e) { // save all tabpages in the list savedTabPages = new List (); foreach (TabPage tp in tabSteps.TabPages) { savedTabPages.Add(tp); } SelectNextStep(); } private void SelectNextStep() { step++; // remove all tabs for (int i = tabSteps.TabPages.Count - 1; i >= 0 ; i--) { tabSteps.TabPages.Remove(tabSteps.TabPages[i]); } // add required tab tabSteps.TabPages.Add(savedTabPages[step]); } private void btnNext_Click(object sender, EventArgs e) { SelectNextStep(); }
Mettre à jour
public class TabControlHelper { private TabControl tc; private List pages; public TabControlHelper(TabControl tabControl) { tc = tabControl; pages = new List (); foreach (TabPage p in tc.TabPages) { pages.Add(p); } } public void HideAllPages() { foreach(TabPage p in pages) { tc.TabPages.Remove(p); } } public void ShowAllPages() { foreach (TabPage p in pages) { tc.TabPages.Add(p); } } public void HidePage(TabPage tp) { tc.TabPages.Remove(tp); } public void ShowPage(TabPage tp) { tc.TabPages.Add(tp); } }
// inVisible TabPage page2 = tabControl1.TabPages[0]; page2.Visible= false;
//Visible page2.Visible= true;
// disable TabPage page2 = tabControl1.TabPages[0]; page2.Enabled = false;
// enable page2.Enabled = true;
//Hide tabCtrlTagInfo.TabPages(0).Hide() tabCtrlTagInfo.TabPages(0).Show()
Il suffit de copier coller et d’essayer, le code ci-dessus a été testé dans vs2010, ça marche.
Masquer TabPage et supprimer l’en-tête:
this.tabPage1.Hide(); this.tabPage3.Hide(); this.tabPage5.Hide(); tabControl1.TabPages.Remove(tabPage1); tabControl1.TabPages.Remove(tabPage3); tabControl1.TabPages.Remove(tabPage5);
Afficher TabPage et Visible l’en-tête:
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;