Привет!
У меня есть 11 панелей на каждой вкладке tabcontrol и вы хотите удалить 10 панелей. поэтому я написал этот код:
var PnlsToRemove = tabControl.SelectedTab.Controls.OfType<Panel>()
.Where(p => !p.Name.StartsWith("BasePanel"));
foreach (var pnl in PnlsToRemove)
pnl.Dispose();
но после отслеживания я задался вопросом, что удаление заказа чередуется!!!
означает, что, когда над кодом работает только панели 0,2,4,6,8,10, удаляется, а остальные остаются.
поэтому я должен поместить мой код в цикл, чтобы поочередно удалять панели:
while (tabControl.SelectedTab.Controls.OfType<Panel>().Count() != 1)
{
var PnlsToRemove = tabControl.SelectedTab.Controls.OfType<Panel>()
.Where(p => !p.Name.StartsWith("BasePanel"));
foreach (var pnl in PnlsToRemove)
pnl.Dispose();
}
в этом случае (для 10 панелей), в то время как() петли 4 раза, чтобы удалить все панели.
ИЗВЕЩЕНИЕ: все мои панели существуют в "PnlsToRemove", и эта ошибка возникает при выполнении "PnlsToRemove" в foreach.
Итак, что случилось с моим кодом???
Почему foreach() перескакивает со следующей панели???
Я думаю, что все ясно!
Основная коллекция мутируется при удалении панелей из списка, и это, по-видимому, отражается в значениях, которые видит "foreach". Решение состоит в том, чтобы хранить значения в новой коллекции и перебирать их. Вы должны сделать это, добавив ".ToList()" к вашему определению PnlsToRemove