Главная » Компоненты

Создаем проект

Добавлено Дата: 22 March, 2011 категория: C#, Компоненты

Для начала создадим новый проект типа Windows Control Library (рис. 5.1). По умолчанию Visual Studio добавляет класс UserControii, который надо переименовать в GradientLabei (именно так мы назовем наш класс метки с градиентной заливкой). Можно переименовать и сам файл тоже. Полученный класс мы наследуем от класса Label (придется еще удалить присваивание свойства AutoScaieMode, т. к. у класса Label его нет). Вот, собственно, и все. Компилируем. Наш первый компонент готов!

Читать »

Компоненты-расширители и глобальные свойства

Добавлено Дата: 21 March, 2011 категория: C#, Компоненты

Компонент Tooltip интересен тем, что, не неся самостоятельной функциональности, он добавляет дополнительное свойство "строка подсказки" ко всем визуальным компонентам. Аналогично, компонент-панель TabieLayoutPanel добавляет всем компонентам, расположенным на этой панели свойства cell, column, Row, coiSpan и RowSpan (рис. 12.1). В этом разделе я хочу рассказать, каким образом создаются такие свойства.

Читать »

Установка компонентов пример с картинками

Добавлено Дата: 21 March, 2011 категория: C#, Компоненты

Пока наш компонент был виден только в рамках одного проекта. Разумеется, если мы хотим использовать наш компонент "по-настоящему", нужно поместить его в палитру компонентов.

Для установки компонента нужно выбрать команду Choose Items в контекстном меню панели Toolbox (Инструменты) в нужной группе компонентов (рис. 5.9). В появившемся диалоге (рис. 5.10) нужно нажать кнопку Browse и выбрать путь к файлу MyControI.dll. После закрытия диалога компонент GradientLabel появится в палитре компонентов. Кстати, появились и картинка, и описание компонента (рис. 5.11).

Читать »

Встроенные компоненты C# примеры

Добавлено Дата: 17 March, 2011 категория: C#, Компоненты

Компонент может содержать другие компоненты, но возникает одна проблема— во время разработки такие "встроенные" компоненты не получают никаких сообщений от Windows и, соответственно, не реагируют на мышь и клавиатуру.

Попробуйте пролистать значения в компоненте ListBox (рис. 6.9), который встроен в компонент ListBoxControl (листинг 6.13). Скроллинг попросту не работает, а компонент ListBox ведет себя "как нарисованный".

Читать »

Описание и значок компонента

Добавлено Дата: 17 March, 2011 категория: C#, Компоненты

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

Для добавления строкового описания для компонента мы добавим к классу атрибут Description:

(Description("Label с градиентной заливкой")] public partial class GradientLabel : Label

Читать »

Действие по умолчанию

Добавлено Дата: 15 March, 2011 категория: C#, Компоненты

Действием по умолчанию называется действие, выполняемое по двойному щелчку мышью на компоненте. Стандартное поведение дизайнера в этом случае — создание обработчика события, помеченного как событие по умолчанию (default event) с помощью атрибута DefauitEvent (см. разд. 5.3). В разд. 5.7 мы добавляли событие OnGradientChange, которое вызывается при изменении свойств градиентной заливки. Для того чтобы обозначить его как событие по умолчанию, достаточно добавить к нему соответствующий атрибут:

Читать »

Добавление дизайнера в проект

Добавлено Дата: 15 March, 2011 категория: C#, Компоненты

Для того чтобы можно было использовать дизайнеры, расположенные в пространстве имен System.windows.Forms, необходимо подключить к проекту библиотеку System.Design.Dll. При создании нового проекта эта библиотека не подключается. Выберите в контекстном меню проекта пункт Add Reference (рис. 6.1), а в появившемся диалоге— модуль System. Design (рис. 6.2). Теперь можно создавать классы дизайнеров и изучать их функциональность.

Читать »

Обобщения

Добавлено Дата: 12 March, 2011 категория: C#, Компоненты

Чтобы не путаться с понятиями, я буду переводить слово generic как "обобщение". По сути обобщения похожи и на шаблоны (templates), и на макросы (macros), но будет проще, если использовать для них отдельное понятие. Упрощенно говоря, обобщения обеспечивают программисту возможность определения "заполнителей" (параметров типа) для аргументов методов и определений типов, которые будут конкретизированы во время вызова обобщенного метода или при создании обобщенного типа (см. [6]). Попробуем описать компонент-обобщение:

Читать »

Работа с именами и типами компонентов

Добавлено Дата: 10 March, 2011 категория: C#, Компоненты

При необходимости получить компонент по имени или типу используется сервис iReferenceService. Вот его основные методы:

?      метод string GetName (object reference) ВОЗВращает ИМЯ компонента;

?          метод object GetReference(string ла/пе) возвращает компонент по имени. Если компонент с таким именем не найден, метод вернет null;

Читать »

Общая архитектура компонентов

Добавлено Дата: 10 March, 2011 категория: C#, Компоненты

Компоненты имеют две "стороны жизни" — во время разработки формы в Visual Studio (design time) и во время выполнения готовой программы (run-time). Конечно, в рамках этой книги нас будет интересовать первый режим.

На рис. 4.1 показана архитектура времени разработки. Еще раз повторю несколько основных положений компонентной модели:

Читать »

Реализация собственного конвертера типа

Добавлено Дата: 8 March, 2011 категория: C#, Компоненты

Класс Gradientconverter, являющийся реализацией конвертера типа для GradientParameters, показан В листинге 8.6.

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

Читать »

Расширение контекстного меню формы

Добавлено Дата: 8 March, 2011 категория: C#, Компоненты

В разд. 6.5 с помощью свойства Verbs класса ComponentDesigner мы расширяли контекстное меню компонента. Сервис iMenuService позволяет аналогично расширить контекстное меню дизайнера, т. е. формы, на которую помещаются компоненты. Следует помнить, что сервис добавляет "глобальное" меню, поэтому перед добавлением я сначала удаляю это меню. Если оно еще не было добавлено— ничего страшного не произойдет, а если было, то это поможет избежать дублирования. В листинге 7.4 показано добавление глобального меню, при вызове которого выводится небольшое сообщение.

Читать »

Изображение значений

Добавлено Дата: 8 March, 2011 категория: C#, Компоненты

используется в стандартных компонентах довольно часто. Для свойства imageindex отображается картинка, для цвета— цветной квадратик и т.д. Для свойства position компонента MinMaxControi можно отображать само значение, так же как это делает сам компонент.

Читать »

Выбор базового класса

Добавлено Дата: 7 March, 2011 категория: C#, Компоненты

Для того чтобы более четко понимать, как правильно выбрать базовый класс для нового компонента, MSDN формулирует следующие правила, О Если класс использует некоторые внешние ресурсы (например, файлы, порты и т, п.), но не будет помещаться на форму во время разработки, достаточно реализовать интерфейс system. iDisposabie. Разумеется, такой класс не будет компонентом, но если вы не собираетесь помещать его на форму, то этого и не требуется.

Читать »

Дескрипторы свойств

Добавлено Дата: 7 March, 2011 категория: C#, Компоненты

И свойство, и событие являются частями компонента, каждая из которых описывается с помощью класса, называемого дескриптором (descriptor). Базовым классом дескриптора является класс MemberDescriptor. Два наследника этого класса являются дескриптором свойств (класс PropertyDescriptor) И дескриптором событий (EventDescriptor).

Читать »