【问题标题】:Tabcontrol select选项卡控件选择
【发布时间】:2008-11-19 05:25:37
【问题描述】:

如何实现一些需要通过一些事件或者一些按钮点击来关闭的标签页?

【问题讨论】:

  • 你可能想澄清这个问题。
  • 我也不明白这个问题...请澄清。

标签: .net winforms tabcontrol


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2015-04-05
    • 2011-10-24
    • 2013-12-11
    • 2011-01-18
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多