Удалить TabPage: Удалить или Очистить или оба? - PullRequest
4 голосов
/ 18 ноября 2009

Я работаю над формой Windows, которая имеет TabControl с именем tabDocuments. Я наткнулся на этот фрагмент кода, который удаляет все страницы из TabControl.

for (int i = tabDocuments.TabPages.Count - 1; i > -1; i--) {
    tabDocuments.TabPages[i].Dispose();
}
    tabDocuments.TabPages.Clear();

Человек, который написал этот код, уже ушел. Я пытаюсь понять, почему код вызывает Clear () после удаления каждой из вкладок (кажется мне ненужным). Может кто-нибудь, пожалуйста, объясните мне, почему? Или вызывает Clear () extra?

Ответы [ 3 ]

3 голосов
/ 18 ноября 2009

Этот фрагмент из Control.Dispose:

        if (this.parent != null)
        {
            this.parent.Controls.Remove(this);
        }

Поэтому вам просто нужно вызвать Dispose, а не Clear.

2 голосов
/ 18 ноября 2009

Вызов Dispose () на каждой из вкладок фактически не удаляет их из коллекции TabPages, а просто удаляет их. Вызов Clear () - это то, что удаляет их из коллекции. Если вы не вызовете Clear (), они все равно будут там, и, скорее всего, произойдут плохие вещи, потому что вы в конечном итоге попытаетесь использовать их после их утилизации.

1 голос
/ 18 ноября 2009

Сначала удалите Tab из коллекции, затем Dispose (). Никогда не уничтожайте () что-то, что все еще используется, так как это вызовет исключения и странное поведение.

Кроме того, убедитесь, что никто не имеет ссылок на вкладки, в противном случае эти ссылки станут недействительными в Dispose ().

...