В чем разница между пользовательским контролем, пользовательским управлением и компонентом? - PullRequest
78 голосов
/ 24 августа 2009

Это три разные вещи, которые вы можете добавить в проект, и я не совсем уверен, что понимаю разницу. Все они, например, отображаются на панели инструментов компонента при работе с Form. Каковы некоторые распространенные сценарии использования для каждого из них? В чем разница?

Ответы [ 5 ]

147 голосов
/ 24 августа 2009

Основное различие между пользовательским элементом управления, пользовательским элементом управления и компонентом заключается в том, что они наследуются от разных уровней в дереве наследования:

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

MyUserControl
   |-> ContainerControl
          |-> ScrollableControl
                 |-> Control
                        |-> Component

Итак, вкратце, вы получаете различное количество предварительно настроенных функций с различными опциями.

Когда бы вы использовали разные варианты? (это мысли и мнения, а не истины)

  • Создайте компонент , если вы хотите предоставить функциональность без пользовательского интерфейса (например, компоненты таймера, источники данных, ...)
  • Создайте пользовательский элемент управления , если вы хотите создать компонент, у которого вы имеете полный контроль над его визуальным внешним видом , и вам не нужен багаж ненужной функциональности. Типичными случаями могут быть простые элементы управления с ограниченной функциональностью (например, кнопка)
  • Создайте пользовательский элемент управления , если вы собираетесь объединить существующие элементы управления в многократно используемые строительные блоки (например, два списка с кнопками, по которым вы можете перемещать элементы между списками).
4 голосов
/ 08 апреля 2013

Это некоторая разница между CustomControl и UserControl:

Пользовательский контроль

Слабосвязанное управление с кодом Wr.r.t и пользовательским интерфейсом

Получается из контроля

Определяет пользовательский интерфейс в ResourceDictionary

Пользовательский интерфейс поддерживает скины

Имеет динамическое расположение

Интерфейс может быть изменен в разных проектах

Имеет полную поддержку набора инструментов

Определяет один элемент управления

Более гибкий

==============

Пользовательский контроль

Тесно связанный элемент управления с кодом W.r.t и пользовательским интерфейсом

Получено из UserControl

Определяет пользовательский интерфейс как обычный XAML

Дочерние элементы управления скины

Имеет статическое расположение

Пользовательский интерфейс исправлен и не может выглядеть по-разному в разных проектах

Не может быть добавлено в панель инструментов

Определяет набор элементов управления

Не очень гибкий, как пользовательский элемент управления

2 голосов
/ 24 августа 2009

В дополнение к тому, что сказал Фредрик, обычно компоненты и пользовательские элементы управления будут использоваться, когда вы планируете использовать их в разных проектах. Используйте пользовательские элементы управления, когда вы будете использовать их только в одном проекте.

0 голосов
/ 14 марта 2017

Я считаю, что последнее утверждение, по моему мнению, неверно. Я создаю пользовательские элементы управления по разным причинам.

Основная причина в том, что если, скажем, я проектирую интерфейс нескольких элементов управления сгруппированы вместе.

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

Также в одной и той же классной библиотеке у меня может быть несколько классов, которые могут быть общими и использоваться для любого из моих пользовательских элементов управления.

Это основная причина, по которой я использую пользовательские элементы управления. И если вы внесете изменения в свой пользовательский элемент управления или библиотеку классов. как только вы создадите работу. DLL будет динамически обновлять дату в папке bin.

Так что, если я ссылаюсь на это в другом проекте Эти изменения также появятся в новом проекте.

Также он не использует те же процедуры рисования, что и форма, и все, что вы загрузили в форму.

Таким образом, пользовательский контроль дает нам возможность быть очень модульным И я могу иметь несколько пользовательских элементов управления, которые разделяют базовые классы библиотеки классов ... Таким образом, цель пользовательского контроля не только для одного проекта. Это не имеет ограничений в этом отношении. Джеф

0 голосов
/ 20 мая 2014

Основное различие между ними - Пользовательский контроль - это файл подкачки с расширением .ascx, который может быть только используется в одном приложении или проекте. Но пользовательские элементы управления - это сборки (файлы dll), которые можно использовать в нескольких приложениях.

...