Подтвердить что ты не робот

Когда добавлять компонентный класс против пользовательского элемента управления?

У меня есть общая идея, и есть некоторые очевидные случаи, но есть и некоторые серые области для меня - когда лучше всего использовать для расширения от компонента, и когда лучше всего создать пользовательский элемент управления? Это относится к конкретной проблеме работы, которую я пытаюсь решить, но особенности этого не важны - для меня достаточно общего ответа на этот вопрос.

4b9b3361

Ответ 1

В WPF и Windows Forms основное отличие состоит в том, что UserControl предназначен для набора элементов управления - многоразового, единого объекта, состоящего из нескольких элементов управления.

Если вы создадите единый примитивный элемент управления с новым поведением, вы будете использовать компонент Component/CustomControl/Control вместо UserControl, вместо того, чтобы создавать "элемент управления", состоящий из небольших элементов управления. Компонент обычно представляет собой не визуальное поведение, когда CustomControl/Control обычно используется для визуального контроля.

Ответ 2

Существует одна существенная разница между компонентом и элементом управления: элементы управления имеют пользовательский интерфейс. Все элементы управления также являются компонентами, но не все компоненты являются элементами управления. Если вам нужно отобразить пользовательский интерфейс, обычно требуется создание какой-либо базы управления (Control, UserControl, Form и т.д.). Если у вас просто есть поведение, например, с компонентом BackgroundWorker, вам нужно будет только непосредственно получить компонент.

Еще одно замечание... и компоненты, и элементы управления могут быть сброшены на поверхность дизайна. Компоненты отображаются как значок и ярлык в специальной области, элементы управления отображаются непосредственно на поверхности дизайна. Однако есть еще одна вещь, которую вы можете использовать: простой класс. Если вам не нужна поддержка поверхности конструкции, я бы рекомендовал использовать простой класс, а не компонент или элемент управления. Они легче по весу и менее раздуты, когда все, что вам нужно, - это 100% чистое поведение без поддержки времени разработки.

Ответ 3

В общем, я бы использовал Component, когда элемент управления не имеет никакого пользовательского интерфейса (или, по крайней мере, не тот, который присутствует в форме). Если это элемент управления пользовательского интерфейса, я бы создал вместо него User Control.

Ответ 4

Я обычно расширяю Control или больше из UserControl, только когда хочу упаковать некоторые функции пользовательского интерфейса. Для компонентов я считаю классический пример Timer. Его можно отбросить на конструктор, настроенный через панель "Свойства", а затем доступ к программному обеспечению через код позади. Короче говоря, я расширяю компонент, когда хочу, чтобы я мог манипулировать каким-то связанным состоянием и поведением, объектом без интерфейса, через конструктора.