2015-12-14 4 views
-3

Эта часть приложения представляет собой простые строки добавления и удаления динамически добавленных элементов управления. Это программное обеспечение для транспортировки, и пользователь добавляет или удаляет позиции в заказе. Добавление строк работает нормально, однако теперь я кодирую часть удаления и столкнулся с этой проблемой ниже. Каждый динамически добавленный элемент управления заканчивается уникальным индексом, относящимся к тому, к какой строке элементов он принадлежит. Таким образом, следующий код должен удалить одну строку из 7 элементов управления, все они заканчиваются одним и тем же индексом. Тем не менее, он удалил только половину из них, поэтому я включил FOR EACH в другой цикл FOR, чтобы четыре раза ударить элементы управления, И ТЕПЕРЬ ЭТО РАБОТАЕТ!?!? Каждый раз, когда я увеличивал родительский цикл, чтобы снова набрать элементы управления, он удалил еще пару, пока магическое число 4 не удалило их все. Что может быть причиной этого?Для каждого элемента управления, не возвращающего все элементы управления

For p As Integer = 1 To 4 
    For Each c As Control In grpVehicles.Controls 
     If c.Name.EndsWith(removeIndexClicked) Then 
      grpVehicles.Controls.Remove(c) 
     End If 
    Next 
Next 
+0

«следует удалить одну строку 7 управления» - звуки, которые вы для пользовательского элемента управления –

+0

Одна вещь, которую я могу сказать вам, если вы хотите коллекции петли, которые вы планируете изменить в процессе итерации, т.е. добавлять/удалять элементы - использовать цикл 'While' и никогда' For' loop –

ответ

-3

Вы не удалять элементы из списка при перечислении этого списка, то есть в For Each цикле. Вы либо используете цикл For, либо работаете в обратном направлении, например.

For i = myList.Count - 1 To 0 Step -1 
    myList.RemoveAt(i) 
Next 

или вы создаете второй список и перечисляете это, например.

For Each item In myList.Where(Function(o) SomeContion(o)).ToArray() 
    myList.Remove(item) 
Next 
+1

Вы видели дублируемую ссылку, не так ли? – sstan

+1

@sstan - Я не вижу проблем с ответом на вопрос, пока он остается открытым. – Enigmativity

+2

@ Энигматичность: см. Наш стандарт сообщества относительно дубликатов здесь: [Как следует обрабатывать дубликаты вопросов?] (Http://meta.stackexchange.com/questions/10841/how-should-duplicate-questions-be-handled), в частности раздел под ** Должен ли я ответить на него? **: * Нет, если вы считаете, что это дубликат. Если вы не думаете, что ответы на дублированный вопрос достаточно хороши, напишите ответ. Если вы не думаете, что этот вопрос является дубликатом, тогда обязательно ответьте на него. * Не говоря, мы все применим это правило совершенно, я, конечно, этого не делаю. Но я думаю, что мы должны хотя бы попробовать. – sstan

Смежные вопросы