Самописные визуальные компоненты

Для чего это нужно?

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

Иногда я нахожу удачные примеры компонентов в других системах или в платных наборах. Если кто-то что-то сделал, другой сможет это повторить. =) Ну и ко всему прочему это отличная зарядка для мозга.

Когда и изучил более плотно смарт тэги, я решил, что некоторые компоненты могут быть улучшены. Это примерно так же как использовать Extended методы для базовых классов или создания Domain Specific Language – вообщем, чтобы писать код было быстрее и легче. То же самое применимо и к компонентам.

Итак, вот некоторые причины, по которым появляются самописные компоненты:

  • Случайно – как результат проектирования интерфейса в целом;
  • Выделение общих частей из случайных компонентов;
  • Создание компонента с самого начала;
  • Расширение существующего компонента.

Два типа самописных компонентов

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

  • Создание как наследника “User Control”;
  • Создание как наследника “Component”.

Я использую наследование от класса Components, когда я хочу добавить новую функциональность к уже существующему компоненту без изменений во внешнем виде. Во всех других случаях я использую UserControl.

Большая часть всего, что будет написано ниже, применима к обоим типам.

Иконки в панели инструментов

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

Но давайте начнем с самого простого пути.

Когда вы создаете компонент и наследуете его от уже существующего, иконка будет так же наследована от базового класса.

После установки компонента в панель инструментов, вы увидите иконку Label.

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

И как последний вариант, можете создать свою собственную уникальную иконку для вашего компонента. Для того чтобы ее можно было применить, она должна соответствовать следующим критериям:

  • Размер 16 х 16 пикселей. Иначе студия растянет иконку, и результат будет ужасным;
  • Цветов нужно использование только 16;
  • Формат картинки BMP.

Когда все подготовлено, добавьте картинку к проекту. Выделите добавленную картинку и откройте окно свойств. Необходимо найти свойство Build action и изменить его на значение Embedded resource.

Если не хочется писать никакого кода, то назовите иконку точно так же как и компонент. Если же вы будете помещать иконки в отдельную проектную папку, либо захотите назвать иконку отлично от самого компонента, то необходимо воспользоваться атрибутом [ToolboxBitmap].

Или

Во время разработки вы все равно будете видеть шестеренку. Для того, чтобы проверить, как оно будет выглядеть в реальной жизни, надо добавить компонент вручную на панель инструментов.

Как добавить компонент вручную

Вызовите контекстное меню, щелкнув на пустом месте в панели инструментов. Выберите “Add new tab”. Введите любое имя на появившейся вкладке. Снова вызовите контекстное меню, щелкнув по ней, и выберите пункт “Choose Items…”. Вы должны увидеть окно «Choose Toolbox Items» как на картинке:

Нажмите кнопку “Browse…” и надите dll с необходимым компонентом. Если вы умудрились уже зарегистрировать библиотеку в GAC, то можно использовать фильтр и добавить компонент из текущего окна. Не забывайте, что окно инструментов показывается только те компоненты, которые возможно использовать для открытого документа.

Полезные атрибуты при создании компонентов

Browsable

Говорит, надо ли показывать это свойство в окне свойств или нет.

Bindable

Если вы планируете, что основное использование свойства будет для биндинга, то можно применить этот атрибут. Как результат использования, свойство появится в категории Data в секции “(DataBindings)”

Category

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

Description

Предоставляет дополнительную информацию о свойстве. Все что вы тут напишете, появится в нижней части окна свойств.

Дополнительно по теме

Как создать смарт тэг.

Как установить компонент в панель инструментов студии.

Hard’n’heavy!

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