Кто-то слил ответ C # в этот, поэтому я должен опубликовать свой ответ здесь. Мне не понравились другие решения, поэтому я создал вспомогательный класс, который позволит легче скрывать / показывать ваши вкладки, сохраняя порядок вкладок.
/// <summary>
/// Memorizes the order of tabs upon creation to make hiding / showing tabs more
/// straightforward. Instead of interacting with the TabCollection, use this class
/// instead.
/// </summary>
public class TabPageHelper
{
private List<TabPage> _allTabs;
private TabControl.TabPageCollection _tabCollection;
public Dictionary<string, int> TabOrder { get; private set; }
public TabPageHelper( TabControl.TabPageCollection tabCollection )
{
_allTabs = new List<TabPage>();
TabOrder = new Dictionary<string, int>();
foreach ( TabPage tab in tabCollection )
{
_allTabs.Add( tab );
}
_tabCollection = tabCollection;
foreach ( int index in Enumerable.Range( 0, tabCollection.Count ) )
{
var tab = tabCollection[index];
TabOrder[tab.Name] = index;
}
}
public void ShowTabPage( string tabText )
{
TabPage page = _allTabs
.Where( t => string.Equals( t.Text, tabText, StringComparison.CurrentCultureIgnoreCase ) )
.First();
int tabPageOrder = TabOrder[page.Name];
if ( !_tabCollection.Contains( page ) )
{
_tabCollection.Insert( tabPageOrder, page );
}
}
public void HideTabPage( string tabText )
{
TabPage page = _allTabs
.Where( t => string.Equals( t.Text, tabText, StringComparison.CurrentCultureIgnoreCase ) )
.First();
int tabPageOrder = TabOrder[page.Name];
if ( _tabCollection.Contains( page ) )
{
_tabCollection.Remove( page );
}
}
}
Чтобы использовать класс, создайте его экземпляр в методе загрузки формы после инициализации компонентов, передав свойство TabPages элемента управления вкладкой.
public Form1()
{
InitializeComponent();
_tabHelper = new TabPageHelper( tabControl1.TabPages );
}
Все ваши вкладки должны существовать при загрузке приложения (т. Е. В представлении «Дизайн»), поскольку класс будет запоминать порядок вкладок при скрытии / отображении. Вы можете скрыть или показать их выборочно в приложении:
_tabHelper.HideTabPage("Settings");
_tabHelper.ShowTabPage("Schedule");