Вы должны остерегаться кода, подобного этому, удаление элементов управления из их контейнера, как это, приводит к неустранимой утечке ресурсов.Controls.Remove / At () или метод Controls.Clear (), как предлагается другими авторами, удаляет элемент управления из коллекции и повторно размещает его в «окне парковки».В противном случае невидимое окно, в котором родное окно может найти гостеприимный дом без необходимости его разрушения.Готова к повторному размещению у другого родителя.
Какова ловушка, вы обычно не перемещаете ее к другому родителю.Элемент управления будет продолжать работать в окне парковки, потребляя ресурсы Windows.Сборщик мусора не может восстановить эти ресурсы.В конце концов ваша программа потерпит крах, когда Windows откажется предоставить больше окон вашему процессу.В сообщении об исключении будет указано «Ошибка создания дескриптора».
Вместо этого вы должны удалить элемент управления.Который также автоматически удаляет элемент управления из его родителя.Правильный код:
while (contentsPanel.Controls.Count > 0) contentsPanel.Controls[0].Dispose();
Или итерируйте в обратном направлении, если вам кажется, что это выглядит слишком странно.