【发布时间】: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