Примечание: Это уже работает отлично, но я пытаюсь понять, почему он работает таким образом, но не другим.Путаница кода - почему одна работает, но не другая?
У меня есть WinForm (C#) с динамически помещать изображения, например, так:
Теперь, если нажать на кнопку «Napred», эти изображения должны быть удалены (среди прочего), для которых я первоначально используется:
foreach(Control ctrl in Controls)
if(ctrl is PictureBox) ctrl.Dispose();
или
for(int i = 0; i < Controls.Count; i++)
if(Controls[i] is PictureBox) Controls[i].Dispose();
Теперь, если я запускаю это, я получаю:
Но если я просто изменить for
заявление, чтобы отправить его назад, он работает?
for(int i = Controls.Count - 1; i >= 0; i--)
if(Controls[i] is PictureBox) Controls[i].Dispose();
(я не буду загружать другое изображение, но он удаляет все элементы (я только получить кнопки влево, в конце концов))
Может кто-нибудь просветить меня, почему один работает , но не другой?
EDIT: Я использую VS2015 Community Edition на Windows 10, если это ошибка отладки
Если у вас есть массив из 10 элементов, а затем удалить ITEM1, Элемент2 станет новым Элемент1 и у вас останется 9 предметов. Стандартный метод утилизации элементов массива состоит в том, чтобы пройти его назад. – LightBulb
Может представлять интерес для других подходов: http://stackoverflow.com/questions/7340757/c-sharp-list-removing-items-while-looping-iterating –
Почему вы не используете метод Remove? –