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





Вы можете удалить вкладку из 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. Желательно создать небольшой класс, который позволит вам сохранять позицию и ссылку на вкладки в. В этом примере используются общие List и 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();
}
Вы, наверное, захотите прояснить этот вопрос.