Вопрос по .net, tabcontrol, winforms, c# – Удалить TabPage: Удалить или Очистить или оба?

4

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

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

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

Ваш Ответ

3   ответа
3

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

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

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

Отражатель -red-gate.com/products/reflector Philip Wallace
Спасибо, где вы нашли фрагмент Control.Dispose? David
@ Xaero, хотя вы правы в отношении удаления элемента управления из родительского элемента. Вы только случайно узнаете это, разобрав сборку. Нет, где в публичной документации для метода говорится, что он удаляет себя из своего родителя. Эта функциональность может быть изменена в будущей версии фреймворка. Я знаю, что вызывающая сборка может быть нацелена на конкретную версию .NET Framework. Однако не лучше ли вызывать метод, так как он предназначен для публичной документации (даже если в этом нет необходимости). rocka
2

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

Даже если это так, вы не должны использовать at как шаблон кода, это может привести к ошибкам с другими объектами Disposable. Max Galkin
Из моего эксперимента удаление вкладки удаляет ее из TabControl David
@ Марти, я не знал об этом, пока не создал пример проекта и не опробовал его :). David
@ Марти - ваш ответ неверный. Проверьте с помощью отражателя. Philip Wallace
Это удивительно! Я не знал об этом. Marty Dill
1

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

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

Обычно вы не утилизируете элементы управления, они существуют во всем приложении и не хранят критически важные неуправляемые ресурсы. Вы можете захотеть избавиться от форм, используемых в качестве одноразовых диалогов. Затем Форма будет распоряжаться своими элементами управления. Max Galkin
Разве это не относится ко всем элементам управления? Вот почему свойство IsDisposed существует ... Philip Wallace

Похожие вопросы