关闭左侧的所有TabPages

时间:2017-02-06 05:08:05

标签: c# winforms tabcontrol

我有一个tabcontrol(WinForm),带有一个按钮“全部向右关闭”,工作正常。现在我忙于“关闭所有左边”。我采用了“靠近右边”的几行并相应地改变了它,但由于一些未知和无法解释的原因,它不能正常工作。

从selectedtab中关闭所有选项卡,但当我用MessageBox替换删除选项卡的行时,我得到正确的输出。以下是我的代码。

tabpagenumber = (tabControl1.SelectedIndex+1);

if (tabControl1.TabCount > 1)
{
    TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
    foreach (TabPage tabpage in tabcoll)
    {
        tabControl1.SelectedTab = tabpage;
        if ((tabControl1.SelectedIndex+1) < tabpagenumber)
        {
            tabControl1.TabPages.Remove(tabpage);
            // MessageBox.Show(tabpagenumber.ToString());
        }
    }
}

在“关闭所有右侧”代码下方正在运行

pagenumber = (tabControl1.SelectedIndex + 1);

if (tabControl1.TabCount > 1)
{
    TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
    foreach (TabPage tabpage in tabcoll)
    {
        tabControl1.SelectedTab = tabpage;

        int testb = tabControl1.TabCount;

        if (pagenumber < (tabControl1.SelectedIndex + 1))
        {
            // closeToolStripMenuItem_Click(sender, e);

            tabControl1.TabPages.Remove(tabpage);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

让我解释一下你面临的问题。我们假设您有4个标签:1234,并且您要删除第三个左侧的所有标签标签。您开始迭代选项卡。当您删除第一个标签时,您选择的是带有索引234的标签吗?不。他们已经更改了索引,现在分别为1,2和3.您删除下一个选项卡。它的索引也是小于3的索引。并且循环继续,直到您删除所有选项卡。

您应该首先遍历选项卡并将要删除的选项卡添加到临时集合中,而不是迭代和删除。完成后,删除此集合中的每个选项卡。