Как скрыть вкладку TabControl

Как скрыть вкладку TabControl в WinForms 2.0?

Нет, этого не существует. Вы должны удалить вкладку и повторно добавить ее, когда захотите. Или используйте другой (сторонний) табулятор.

Фрагмент кода для скрытия вкладки

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

Фрагмент кода для отображения вкладки

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

Свойство Visiblity не было реализовано на вкладках, и метод Insert также отсутствует.

Вам нужно вручную вставить и удалить вкладки.

Вот и работа для этого.

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

Я понимаю, что вопрос старый, и принятый ответ старый, но …

По крайней мере, в .NET 4.0 …

Чтобы скрыть вкладку:

 tabControl.TabPages.Remove(tabPage); 

Вернемся:

 tabControl.TabPages.Insert(index, tabPage); 

TabPages работает намного лучше, чем Controls для этого.

Вариант 1

Во избежание визуального кликирования вам может потребоваться:

 bindingSource.RaiseListChangeEvent = false 

или

 myTabControl.RaiseSelectedIndexChanged = false 

Удалите вкладку:

 myTabControl.Remove(myTabPage); 

Добавить вкладку:

 myTabControl.Add(myTabPage); 

Вставьте вкладку в определенном месте:

 myTabControl.Insert(2, myTabPage); 

Не забудьте изменить изменения:

 bindingSource.RaiseListChangeEvent = true; 

или

 myTabControl.RaiseSelectedIndexChanged = true; 

Вариант 2

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

Решения, предоставленные до сих пор, слишком сложны. Прочтите самое простое решение по адресу: http://www.codeproject.com/Questions/614157/How-to-Hide-TabControl-Headers

Вы можете использовать этот метод, чтобы сделать их невидимыми во время выполнения:

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

Создайте новый пустой class и пропустите его внутри него:

 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- Добавьте ссылку в пространство имен ExtensionMethods в код формы:

 using ExtensionMethods; 

3 Теперь вы можете использовать свой yourTabPage.IsVisible(); проверить его видимость, yourTabPage.HidePage(); скрыть его, и yourTabPage.ShowPageInTabControl(parentTabControl); чтобы показать это.

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

Я объединил ответ от @Jack Griffin и одного из @amazedsaint ( fragment кода dotnetspider соответственно ) в один TabControlHelper .

TabControlHelper позволяет:

  • Показать / скрыть все вкладки
  • Показать / скрыть отдельные вкладки
  • Сохранять исходное положение страниц вкладок
  • Переключить вкладки

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

Используйте его так:

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

Исходный порядок вкладок хранится в списке, который полностью скрыт внутри анонимной функции. Храните ссылку на экземпляр функции, и вы сохраняете исходный порядок табуляции.

вы можете установить родительский элемент закладки на значение null для скрытия и показать только установить родительский элемент вкладки tabcontrol

Ну, если вы не хотите испортить существующий код и просто хотите скрыть вкладку, вы можете изменить созданный компилятором код, чтобы прокомментировать строку, которая добавляет вкладку в tabcontrol.

Например: Следующая строка добавляет вкладку с именем «readformatcardpage» в Tabcontrol с именем tabcontrol,

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

Следующее предотвратит добавление вкладки в tabcontrol

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

Как дешевая работа, я использовал ярлык, чтобы скрыть вкладки, которые я хотел скрыть.

Затем мы можем использовать видимую опору ярлыка в качестве замены. Если кто-то пойдет по этому маршруту, не забудьте обработать штрихи клавиатуры или события видимости. Вам не нужны левые клавиши курсора, отображающие вкладку, которую вы пытаетесь скрыть.

Не уверен в «Winforms 2.0», но это проверено и проверено:

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

В WPF это довольно просто:

Предполагая, что вы указали имя TabItem, например,

    

В коде за формой вы можете иметь следующее:

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

Следует отметить, что объект User именем user был создан с его свойством AccessLevel установленным для одного из определяемых пользователем значений enums AccessLevelEnum … независимо от того, это просто условие, по которому я решил показать вкладку или нет.

У меня также был этот вопрос. tabPage.Visible не реализован, как указано ранее, что было большой помощью (+1). Я обнаружил, что вы можете переопределить элемент управления, и это сработает. Немного о некропостинге, но я решил опубликовать свое решение здесь для других …

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

Я использовал тот же подход, но проблема заключается в том, что при удалении закладки из списка вкладок TabPages она также удаляется из списка элементов управления вкладками. И он не расположен, когда форма расположена.

Поэтому, если у вас много таких «скрытых» вкладок, вы можете получить превышение квоты на дескриптор windows, и только его перезапуск будет исправлен.

Если вы говорите об AjaxTabControlExtender, тогда установите TabIndex для каждой вкладки и установите свойство Visible True / False в соответствии с вашими потребностями.

myTab.Tabs [1] .Visible = истина / ложь;

+1 для Microsoft :-).
Мне удалось сделать это так:
(предполагается, что у вас есть кнопка «Далее», которая отображает следующую вкладку – tabSteps – это имя элемента управления Tab)
При запуске сохраните все закладки в соответствующем списке. Когда пользователь нажимает кнопку «Далее», удалите все вкладки в элементе управления вкладкой, а затем добавьте это с соответствующим индексом:

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

Обновить

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

Просто скопируйте пасту и попробуйте, вышеуказанный код был протестирован в vs2010, он работает.

Скрыть вкладку и удалить заголовок:

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

Показать вкладку «TabPage» и «Видимый заголовок»:

 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; 
  • Предотвратить отображение windows безопасности Windows
  • Как определить событие EventGridView CheckBox?
  • SendKeys.Send и ключ Windows
  • Как изменить текст кнопки для кнопок «Да» и «Нет» в диалоговом окне MessageBox.Show?
  • Windows Forms: Как скрыть кнопку Close (x)?
  • Как передать значение из дочернего элемента обратно в родительскую форму?
  • Простая анимация с использованием C # / Windows Forms
  • C #: Как добавить подсказку в элемент управления?
  • Foreach Control в форме, как я могу что-то сделать для всех текстовых полей в моей форме?
  • Отладка цели отсутствует?
  • Выберите файл или папку из того же диалогового windows в .NET.
  • Давайте будем гением компьютера.