Когда добавлять класс компонентов против пользовательского элемента управления? - PullRequest
23 голосов
/ 21 сентября 2009

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

Ответы [ 4 ]

20 голосов
/ 21 сентября 2009

Как в WPF, так и в Windows Forms основное отличие состоит в том, что UserControl должен представлять собой набор элементов управления - повторно используемый единственный объект, «составленный» из нескольких элементов управления.

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

14 голосов
/ 22 сентября 2009

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

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

5 голосов
/ 21 сентября 2009

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

4 голосов
/ 22 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...