我有一个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);
}
}
}
答案 0 :(得分:2)
让我解释一下你面临的问题。我们假设您有4
个标签:1
,2
,3
和4
,并且您要删除第三个左侧的所有标签标签。您开始迭代选项卡。当您删除第一个标签时,您选择的是带有索引2
,3
,4
的标签吗?不。他们已经更改了索引,现在分别为1,2和3.您删除下一个选项卡。它的索引也是小于3
的索引。并且循环继续,直到您删除所有选项卡。
您应该首先遍历选项卡并将要删除的选项卡添加到临时集合中,而不是迭代和删除。完成后,删除此集合中的每个选项卡。