Когда вы удаляете элементы управления в цикле For Each
, вы на самом деле изменяете коллекцию, через которую вы пытаетесь выполнить цикл. Когда вы удаляете первый элемент в коллекции, второй элемент перемещаетсячтобы стать первым.Но теперь, когда вы достигнете второго индекса вашего цикла, третий элемент находится на своем месте.Вы фактически пропустили удаление второго элемента и удалили только первый и третий.И так далее по всему циклу.
Вместо этого вам необходимо перебрать элементы управления в обратном порядке и удалить элемент в каждом индексе. Начав удалениепредметы с конца, вы не будете влиять на порядок или положение предметов.
Итак, просто измените ваш метод на следующий:
Public Sub RemoveControls()
For i As Integer = (GroupBox1.Controls.Count - 1) To 0 Step -1
Dim ctrl As Control = GroupBox1.Controls(i)
GroupBox1.Controls.Remove(ctrl)
ctrl.Dispose()
Next i
End Sub