Страницы

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

суббота, 6 июля 2019 г.

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

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


Ответ

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

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

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