【问题标题】:Close all TabPages to the left关闭左侧的所有 TabPages
【发布时间】:2017-06-22 23:22:03
【问题描述】:

我有一个选项卡控件(WinForm),带有一个“全部向右关闭”按钮,效果很好。现在我正忙于“关闭所有到左边”。我采用了“靠近右侧”的几行并相应地对其进行了更改,但由于某些未知且无法解释的原因,它无法正常工作。

它从选定的选项卡关闭所有选项卡,但是当我用 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);
        }
    }
}

【问题讨论】:

  • 提示:它可能与 .Remove 在 foreach 语句中有关。当 foreach 循环期望集合是不可变的时,您正在更改集合。
  • 嗨内森。对不起,我现在不在你身边。根据我对 C# 的有限了解, .Remove 应该位于 foreach 语句中,以便能够删除左侧的所有选项卡。 “全部靠右”的代码工作 100%
  • 请看这篇堆栈溢出文章。 stackoverflow.com/questions/7193294/…你能发布你收到的确切错误吗?
  • 嗨内森 - 感谢您的链接。今天晚些时候我会在家里看看。我没有收到错误,而是删除了所有标签页,其中应该只删除所选标签左侧的标签页。对“全部靠右”进行的修改完全相同。
  • 我能问一下您为什么回滚对您的问题所做的(好的)编辑吗?我们的目标是让此处的帖子对可能遇到相同问题的其他访问者有用,并且编辑使您的帖子更适合未来。

标签: c# winforms tabcontrol


【解决方案1】:

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

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

【讨论】:

  • 谢谢绿荫。现在这是有道理的。你能不能指点我现在正确的方向。把它放入一个数组然后删除它?
  • @SuzanneCoetzee 你应该自己尝试一下,我可以稍后修复你的错误。这并不难,真的。
  • 北行不难,北在何方难
  • @SuzanneCoetzee 您只需创建一个 TabPages 列表,而不是删除它们,您首先将它们添加到列表中。然后你引入第二个循环,迭代这些选项卡并将它们从 TabPages 中删除
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多