Como ocultar o TabPage do TabControl

Como esconder o TabPage do TabControl no WinForms 2.0?

Não, isso não existe. Você precisa remover a guia e adicioná-la novamente quando quiser. Ou use um controle de guia diferente (de terceiros).

Snippet de código para ocultar uma tabPage

 private void HideTab1_Click(object sender, EventArgs e) { tabControl1.TabPages.Remove(tabPage1); } 

Snippet de código para mostrar uma tabPage

 private void ShowTab1_Click(object sender, EventArgs e) { tabControl1.TabPages.Add(tabPage1); } 

A propriedade Visiblity não foi implementada nas Tabuinhas e também não há nenhum método Insert.

Você precisa inserir e remover manualmente as guias.

Aqui está um trabalho para o mesmo.

http://www.dotnetspider.com/resources/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx

Eu percebo que a pergunta é antiga, e a resposta aceita é antiga, mas …

Pelo menos no .NET 4.0 …

Para ocultar uma guia:

 tabControl.TabPages.Remove(tabPage); 

Para colocá-lo de volta:

 tabControl.TabPages.Insert(index, tabPage); 

TabPages funciona muito melhor do que Controls para isso.

Variante 1

Para evitar o klikering visual, você pode precisar usar:

 bindingSource.RaiseListChangeEvent = false 

ou

 myTabControl.RaiseSelectedIndexChanged = false 

Remover uma página de guia:

 myTabControl.Remove(myTabPage); 

Adicione uma página de guia:

 myTabControl.Add(myTabPage); 

Inserir uma ficha de registro no local específico:

 myTabControl.Insert(2, myTabPage); 

Não esqueça de reverter as mudanças:

 bindingSource.RaiseListChangeEvent = true; 

ou

 myTabControl.RaiseSelectedIndexChanged = true; 

Variante 2

 myTabPage.parent = null; myTabPage.parent = myTabControl; 

As soluções fornecidas até agora são muito complicadas. Leia a solução mais fácil em: http://www.codeproject.com/Questions/614157/How-to-Hide-TabControl-Headers

Você pode usar esse método para torná-los invisíveis no tempo de execução:

 private void HideAllTabsOnTabControl(TabControl theTabControl) { theTabControl.Appearance = TabAppearance.FlatButtons; theTabControl.ItemSize = new Size(0, 1); theTabControl.SizeMode = TabSizeMode.Fixed; } 

Crie uma nova class vazia e passe por ela:

 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- Adicione referência ao namespace ExtensionMethods no seu código de formulário:

 using ExtensionMethods; 

3- Agora você pode usar o yourTabPage.IsVisible(); para verificar sua visibilidade, yourTabPage.HidePage(); para ocultá-lo e yourTabPage.ShowPageInTabControl(parentTabControl); para mostrá-lo.

 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); } 

Combinei a resposta de @Jack Griffin e a de @amazedsaint ( o trecho de código dotnetspider, respectivamente ) em um único TabControlHelper .

O TabControlHelper permite que você:

  • Mostrar / ocultar todas as páginas de guias
  • Mostrar / ocultar páginas de guia única
  • Mantenha a posição original das fichas de registro
  • Páginas de registro de troca

 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); } } }; } 

Use assim:

  var hider = this.TabContainer1.GetTabHider(); hider((tab) => tab.Text != "tabPage1"); hider((tab) => tab.Text != "tabpage2"); 

A ordenação original das guias é mantida em uma lista completamente oculta dentro da function anônima. Mantenha uma referência à instância da function e mantenha sua ordem de tabulação original.

você pode definir o pai da tabpage para null para se esconder e para mostrar apenas o pai tabpage set para o controle de tabulação

Bem, se você não quer estragar o código existente e apenas quer esconder uma aba, você pode modificar o código gerado pelo compilador para comentar a linha que adiciona a aba ao tabcontrol.

Por exemplo: A linha a seguir adiciona uma guia chamada “readformatcardpage” a um TabControl chamado “tabcontrol”

this.tabcontrol.Controls.Add (this.readformatcardpage);

O seguinte evitará a adição da guia ao controle de tabulação

//this.tabcontrol.Controls.Add(this.readformatcardpage);

Como um trabalho barato, usei um label para encobrir as guias que queria ocultar.

Podemos então usar o adesivo visível do label como um substituto. Se alguém seguir esse caminho, não se esqueça de manipular os traços do teclado ou os events de visibilidade. Você não gostaria que as teclas do cursor da esquerda à direita expusessem a guia que você está tentando ocultar.

Não tenho certeza sobre “WinForms 2.0”, mas isso é testado e comprovado:

http://www.mostthingsweb.com/2011/01/hiding-tab-headers-on-a-tabcontrol-in-c/

No WPF, é bem fácil:

Supondo que você tenha dado um nome ao TabItem, por exemplo,

    

Você poderia ter o seguinte no código por trás do formulário:

  if (user.AccessLevel == AccessLevelEnum.Admin) { adminTab.Visibility = System.Windows.Visibility.Visible; } 

Deve-se observar que um object User denominado user foi criado com sua propriedade AccessLevel definida como um dos valores enum definidos pelo usuário de AccessLevelEnum … whatever; é apenas uma condição pela qual eu decido mostrar a guia ou não.

Eu também tive essa pergunta. tabPage.Visible não está implementado como indicado anteriormente, o que foi uma grande ajuda (+1). Eu encontrei você pode replace o controle e isso vai funcionar. Um pouco de necroposting, mas pensei em postar minha solução aqui para os outros …

  [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; } } 

Eu usei a mesma abordagem, mas o problema é que quando a página da guia foi removida da lista TabPages do controle de guias, ela também é removida da lista de Controles da página da guia. E não é descartado quando o formulário é descartado.

Portanto, se você tiver muitas dessas guias “ocultas”, poderá obter o erro de cota excedida do Windows e somente a reboot do aplicativo corrigirá o erro .

Se você estiver falando sobre AjaxTabControlExtender, defina TabIndex de todas as guias e defina a propriedade Visible True / False de acordo com sua necessidade.

myTab.Tabs [1] .Visible = true / false;

+1 para microsoft :-).
Eu consegui fazer assim:
(pressupõe que você tenha um botão ‘Próximo’ que exibe a próxima página – tabSteps é o nome do controle Tab)
Na boot, salve todas as páginas em uma lista adequada. Quando o usuário pressionar o botão Avançar, remova todas as páginas do controle da guia e adicione-o com o índice adequado:

  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(); } 

Atualizar

 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() 

Basta copiar colar e experimentá-lo, o código acima foi testado no vs2010, funciona.

Ocultar TabPage e remover o header:

 this.tabPage1.Hide(); this.tabPage3.Hide(); this.tabPage5.Hide(); tabControl1.TabPages.Remove(tabPage1); tabControl1.TabPages.Remove(tabPage3); tabControl1.TabPages.Remove(tabPage5); 

Mostrar TabPage e visível o 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;