Tabcontrol select - PullRequest
       8

Tabcontrol select

0 голосов
/ 19 ноября 2008

Как реализовать некоторые из вкладок, которые нужно закрывать по некоторым событиям или по нажатию некоторых кнопок?

1 Ответ

1 голос
/ 26 ноября 2008

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

tabControl1.TabPages.Remove(tabControl1.SelectedTab);

При закрытии нескольких вкладок может потребоваться сначала удалить вкладки с более высоким порядковым номером, так как при открытии вкладки изменяется индекс страниц вкладок:

private void button1_Click(object sender, EventArgs e)
{
    // Close second and fourth tab
    if (tabControl1.TabPages.Count > 3)
    {
        // Work backwards when removing tabs
        tabControl1.TabPages.RemoveAt(3);
        tabControl1.TabPages.RemoveAt(1);
    }
}

Если вам снова понадобятся вкладки после их закрытия, то Hide() не поможет. Вам следует сохранить ссылку на каждую вкладку в памяти и добавить или вставить их позже:

tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Add(tabPage1);
tabControl1.TabPages.Insert(0, tabPage1);

Используя приведенный ниже пример, вы можете сохранить коллекцию вкладок, которые вы закрыли, и затем поместить их в TabControl. Предпочтительно вы создадите небольшой класс, который позволит вам сохранить положение и ссылку на вкладки. В этом примере используются универсальные списки и Control.Tag, которые делают то же самое.

private List<TabPage> tabsClosed = new List<TabPage>();

private void button1_Click(object sender, EventArgs e)
{
    // Close second and fourth tab
    if (tabControl1.TabCount > 3)
    {
        // Keep a reference to tabs in memory before closing them
        tabsClosed.Add(tabControl1.TabPages[1]);
        tabsClosed.Add(tabControl1.TabPages[3]);

        // Store the tabs position somewhere
        tabControl1.TabPages[1].Tag = 1;
        tabControl1.TabPages[3].Tag = 3;

        // Work backwards when removing tabs
        tabControl1.TabPages.RemoveAt(3);
        tabControl1.TabPages.RemoveAt(1);
    }
}

private void button2_Click(object sender, EventArgs e)
{
    foreach (TabPage tab in tabsClosed)
    {
        //tabControl1.Controls.Add(tab);
        tabControl1.TabPages.Insert((int)tab.Tag, tab);
    }
    tabsClosed.Clear();
}
...