For Each с As Control In Panel1.Controls
If c.Text.Length = 0 Then Panel1.Controls.Remove(c)
Next
Но так делать нельзя! Потому что нельзя изменить коллекцию во время прохода циклом по элементам этой коллекции (а удаляя элемент из коллекции, мы изменяем коллекцию). А вот как можно сделать:
Dim lst As Control() = Panel1.Controls.Cast(Of Control).Where(Function(c) c.Text.Length = 0).ToArray For Each c In lst Panel1.Controls.Remove(c) c.Dispose() Next
Что мы сделали? Сначала поместили все удаляемые элементы коллекции в новый массив lst. Теперь проходим по элементам массива в цикле и делаем, все, что нужно. Можем удалять элемент из исходной коллекции - в массиве он остается, а значит работа цикла не сбивается. Dispose() освобождает ресурсы, занятые объектом. А созданный массив, как локальный объект, прекратит свое существование при выходе из текущей процедуры.
Комментариев нет:
Отправить комментарий