Странная ошибка С# при попытке удалить элементы управления из группового поля

В настоящее время я столкнулся с очень странной проблемой. Я просто хочу удалить все элементы управления из группового поля, но это не удаляет все элементы управления. Сейчас это действительно похоже на ошибку со стороны Microsoft. Я пробовал много разных способов удаления этих элементов управления, но ни один из них не работал. У меня есть два других метода, в которых я удаляю только один элемент управления за раз (и нет, я не могу вызвать это в цикле для всех своих элементов управления), и там он работает нормально. Я понятия не имею, в чем может быть проблема. Надеюсь, кто-то знает способ обойти это.

foreach (Control c in fieldBox.Controls) // this does not work, it only removes my labels (I have one txt and one lbl)
                fieldBox.Controls.Remove(c);

            for (int i = 0; i < fieldBox.Controls.Count; i++) // this does not work either
                fieldBox.Controls.Remove(fieldBox.Controls[i]);

            for (int i = 0; i < fieldBox.Controls.Count; i++) // still no success
                fieldBox.Controls.RemoveAt(i);

            for (int i = 0; i < fieldBox.Controls.Count; i++) // nope
                fieldBox.Controls.RemoveByKey(fieldBox.Controls[i].Name);

            foreach (Control c in fieldBox.Controls) // my final answer, but the outcome did not change
                fieldBox.Controls.RemoveByKey(c.Name);

person user3002449    schedule 14.04.2015    source источник
comment
Каков результат fieldBox.Controls.Count?   -  person Praveen Paulose    schedule 15.04.2015
comment
Что означает does not work? Выдается ошибка? Изменение коллекции во время ее зацикливания обычно не удается. Лучше всего сохранить элемент управления, а затем удалить его.   -  person crthompson    schedule 15.04.2015
comment
@PraveenPaulose Шесть, что правильно, но я также смотрел на это в цикле, и каким-то образом оно уменьшается до четырех, а затем случайным образом останавливается.   -  person user3002449    schedule 15.04.2015
comment
@paqogomez Нет, но он удаляет не все элементы управления, а только половину.   -  person user3002449    schedule 15.04.2015
comment
Учтите, что ваш индекс увеличивается, а размер коллекции уменьшается. Половина кажется правильной.   -  person crthompson    schedule 15.04.2015
comment
@paqogomez Не слишком уверен, как это решить. Я тоже думал об этом, но я думал, что цикл foreach справится с этим соответствующим образом. Я действительно не хочу перебирать все снова, так как это было бы не очень эффективно. Есть ли такой же другой способ сделать это?   -  person user3002449    schedule 15.04.2015
comment
Решение @PraveenPaulose будет работать отлично.   -  person crthompson    schedule 15.04.2015
comment
Хорошо, я должен просто использовать цикл while. Это должно решить эту проблему.   -  person user3002449    schedule 15.04.2015
comment
?!?!?! какие? Ничто о решении @PraveenPaulose не говорит о цикле while   -  person crthompson    schedule 15.04.2015
comment
Ах да, не видел, что без обновления. Я попробую оба метода.   -  person user3002449    schedule 15.04.2015
comment
С циклом while вы все равно закончите делать больше итераций, чем необходимо. С решением @PraveenPaulose вы начнете сверху, уберете вниз и закончите. Очень эффективный.   -  person crthompson    schedule 15.04.2015


Ответы (1)


Попробуйте уменьшить счетчик и удалить элементы управления

for (int i = fieldBox.Controls.Count - 1; i >= 0; i--) // hopefully successful
            fieldBox.Controls.RemoveAt(i);
person Praveen Paulose    schedule 14.04.2015