Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Зачем в пользовательском контроле поле components?

#c_sharp #visual_studio #usercontrol

                    
При создании нового контрола студия всегда создаёт поле
private System.ComponentModel.IContainer components = null;

но никогда его не использует.
Для чего оно нужно?    


Ответы

Ответ 1



На форму можно положить не только контролы, но и невизуальные компоненты. В то время как контролы при закрытии формы освобождаются автоматически, т.к. форма знает о своих дочерних контролах и прибивает их, компоненты этим свойством не обладают, и их надо закрывать явно. Для этого дизайнер создаёт переменную components и в перекрытом методе Dispose() прибивает компоненты, которые положены на форму. Для того чтобы понять, чем недоволен компилятор, посмотрите на две вещи: 1. Есть ли на форме невизуальные компоненты? 2. Если есть, есть ли среди них компонент, конструктор которого принимает экземпляр IContainer. Правильно написанные компоненты должны иметь именно такой конструктор, который будет генерироваться дизайнером.

Ответ 2



Мой ответ может быть не очень точным. На самом то деле используется, там хранятся ссылки на компоненты (потому что форма это контейнер) и при закрытии формы идет освобождение ресурсов (компонентов). Там в комментариях еще же написано: Required designer variable.

Комментариев нет:

Отправить комментарий