Большое значение для классов, производных от Control (включая TabPage), представляет метод Dispose ().Они защищены от автоматической сборки мусора, Winforms хранит внутреннюю таблицу, которая сопоставляет дескриптор элемента управления со ссылкой на элемент управления.Вот почему, скажем, ваша основная форма не может внезапно получить мусор, даже если ваша программа не хранит ссылку на нее.
Добавление TabPage в коллекцию TabControl обеспечивает автоматическое удаление.То же самое относится и к TabControl, он будет добавлен в коллекцию Controls формы.Обычная цепочка событий заключается в том, что ваша программа или пользователь закрывают форму.Класс Form выполняет итерации своих дочерних элементов управления и вызывает их метод Dispose ().TabControl делает то же самое в своем методе Dispose (), удаляя вкладки.Окно Windows разрушается в процессе, удаляя дескриптор из этой таблицы сопоставления и теперь позволяя сборщику мусора, в конечном итоге, собирать управляемую оболочку для элементов управления.
Существует неприятная ловушка, которая попадает в число программистов Winformsв беде.Если вы удаляете элемент управления из коллекции его родителей, то вы сами несете ответственность за его удаление.Удаление не автоматически удаляет его.Winforms поддерживает родное окно, временно переопределяя элемент управления в скрытое окно, называемое «окном парковки».Хорошая функция, она позволяет вам перемещать элемент управления от одного родителя к другому без необходимости уничтожать и заново создавать элемент управления.
Но ключевое слово там «временно».Это только временно, если вы в следующий раз переучите контроль.Таким образом это перемещено от окна парковки до нового родителя.Если вы на самом деле не перекрасите его, то на окне парковки он останется живым навсегда.Сожрать ресурсы, пока программа не завершится.Это иначе известно как утечка.Он может привести к сбою вашей программы, если Windows отказывается создавать другое окно, когда вы уже создали 10 000 из них.
Метод ControlCollection.Clear () особенно вреден в этом случае. не располагает элементы управления, все они перемещаются в это парковочное окно.Если это не так, это редко случается, вам придется вызывать Dispose () для них самостоятельно.