如何实现一些需要通过某些事件或某些按钮单击来关闭的选项卡?
Nirmal
问问题
763 次
1 回答
1
您可以像这样从 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();
}
于 2008-11-26T14:09:53.440 回答