У меня есть tabcontrol (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% –
Пожалуйста, взгляните на эту статью переполнения стека. http://stackoverflow.com/questions/7193294/intelligent-way-of-removing-items-from-a-listt-while-enumerating-in-c-sharp Вы можете публиковать точная ошибка, которую вы получаете ? –