Библиотека .NET Framework имеет два типа компонентов: визуальные и неви- зуальпые. Визуальные компоненты являются элементами пользовательского интерфейса. Это, например, компоненты: кнопка (Button), выпадающий список (сошЬоВох) или метка (Label). Невизуальные компоненты не имеют пользовательского интерфейса и не могут располагаться на форме. Дизайнер Visual Studio располагает их внизу окна дизайнера1 (рис. 2.6). Такими компонентами являются, например, компоненты работы с базами данных, таймер (Timer) и компонент работы с последовательным портом (serialPort).
Главная » Компоненты
Визуальные и невизуальные компоненты в дизайнере формы
Добавлено Vadik Дата: 17 February, 2011 категория: C#, КомпонентыСтандартный набор значений-классов
Добавлено Vadik Дата: 17 February, 2011 категория: C#, КомпонентыС помощью класса ExpandabieObjectconverter можно реализовать очень интересное поведение редактора свойства. Рассмотрим некий компонент, который будет описывать запись об интервью (конечно, я мог бы придумать пример на основе класса GradientLabel, но, кажется, он уже порядком всем надоел):
Смарт-теги
Добавлено Vadik Дата: 12 February, 2011 категория: C#, КомпонентыОдним из интересных новшеств Visual Studio являются смарт-те?их (smart tags), позволяющие вынести в специальный диалог наиболее важные свойства компонента. Например, смарт-тег для компонента ListBox открывает диалог редактирования элементов (рис. 6.3). Сам тег выглядит как небольшой значок со стрелочкой.
Скрытие элементов из редактора свойств
Добавлено Vadik Дата: 9 February, 2011 категория: C#, КомпонентыВ нашем компоненте GradientLabei есть одно неудобство: свойство BackCoior, доставшееся нам по наследству от класса Label, противоречит нашим понятиям о градиентной заливке. Было бы хорошо убрать его из редактора свойств, чтобы не вводить пользователей нашего компонента в заблуждение. Добавить этому свойству атрибут Browsabie (false) не получится, т. к. мы не можем исправить уже существующий класс, поэтому мы создадим специальный класс дизайнера, который будет управлять показом свойств.
Пользовательские данные времени разработки
Добавлено Vadik Дата: 9 February, 2011 категория: C#, КомпонентыОчень часто возникает задача сохранить некоторые данные, нужные только для режима разработки. Если бы такие данные являлись свойствами компонента, можно было бы использовать способ, описанный в разд. б. 7. Но добавление свойств времени разработки— не всегда подходящий способ. В некоторых случаях подойдет использование сервиса IDictionaryServiceDesigner, который предоставляет доступ к хэш-таблице данных компонента, доступных только в режиме разработки. Эта таблица хранит соответствие ключа (key) и значения (value).
Редактирование флагов
Добавлено Vadik Дата: 8 February, 2011 категория: C#, КомпонентыВ разд. 8.3 я показал, как использовать конвертер Enumconverter при редактировании перечисления. Теперь я хочу рассказать, как редактировать перечисление, если оно отмечено флагом Flags, т. е. возможно выбрать несколько значений перечисления. Разумеется, значения флагов должны иметь значения степеней двойки:
Рендеринг компонентов
Добавлено Vadik Дата: 8 February, 2011 категория: C#, КомпонентыВ предыдущих главах мы уже сталкивались с отрисовкой визуальных компонентов, а именно с методами onPaint о, OnPaintBackgroundo. Также мы рассматривали метод OnPa int Adornments () KJiaCCa Control Designer, ПОЗВОЛЯЮЩИЙ проводить отрисовку компонента только в режиме дизайнера. Теперь пришла пора поговорить об этом более подробно.
Отладка компонентов в режиме разработки
Добавлено Vadik Дата: 8 February, 2011 категория: C#, КомпонентыПрежде чем пойти дальше, мне нужно рассказать об одной из важнейших сторон разработки любого кода — отладке. Работать вслепую очень неудобно и непроизводительно, и, конечно, разработчики Visual Studio продумали вопрос отладки компонентов в режиме разработки.
Контекстное меню компонента
Добавлено Vadik Дата: 8 February, 2011 категория: C#, КомпонентыВ этом разделе я расскажу, как формировать контекстное меню компонента, вызываемое по щелчку правой кнопки мыши. Вообще говоря, контекстное меню формируется с помощью класса DesignerVerb и свойства verbs класса componentDesigner, но, прежде чем начать рассказывать про эти классы, хочу раскрыть небольшой секрет. Класс DesignerActionMethoditem имеет еще один конструктор, о котором я не рассказал в предыдущем разделе. Шестым параметром конструктора можно указать дизайнеру автоматически создать пункт контекстного меню, соответствующий вызываемому методу (рис. 6.6):
Интерфейсы источника данных
Добавлено Vadik Дата: 7 February, 2011 категория: C#, КомпонентыВ предыдущем разделе мы использовали в качестве источника данных класс, наследованный от класса BindingList. На самом деле источником данных может являться любой класс, реализующий интерфейс iList. Этого вполне достаточно для отображения списка данных. Сейчас я хочу рассказать о некоторых других интерфейсах, доступных для источников данных. Детальный
Компоненты: достоинства и недостатки
Добавлено Vadik Дата: 5 February, 2011 категория: C#, КомпонентыКомпонентно-ориентированная разработка имеет свои сильные и слабые стороны. Несомненными достоинствами является повторная используемость кода, согласованность пользовательского интерфейса, возможность бысгрой и продуктивной разработки программ. Именно компоненты позволяют программистам составлять конечный продукт из "кирпичиков", не вдаваясь в детали реализации конкретного компонента. Конечно, наборы классов, используемые при объектно-ориентированном подходе, тоже дают возможность повторного использования кода, но компоненты делают повторное использование кода совершенно естественным.
Среда Visual Studio
Добавлено Vadik Дата: 4 February, 2011 категория: C#, КомпонентыПри создании нового приложения Windows Application среда открывает редактор формы и несколько окон (рис. 2.1), среди которых обычно (в зависимости от настроек среды) окна Solution Explorer (Обозреватель проекта), Toolbox (Инструменты) и Properties (Свойства). Именно эти три окна представляют для нас наибольший интерес.
Реализация дополнительного меню с помощью маркера
Добавлено Vadik Дата: 4 February, 2011 категория: C#, КомпонентыКласс Behavior, используемый при определении поведения маркера, никак не ограничивает нас, как именно будет реализовано это поведение. В качестве дополнительного примера я хочу показать код, реализующий дополнительное меню, которое открывается при щелчке на маркере. Нечто подобное реализовано в .NET 3.0 для компонентов Windows Workflow Foundation. Само меню создается в конструкторе класса:
Редактор с параметрами
Добавлено Vadik Дата: 2 February, 2011 категория: C#, КомпонентыПодключение редактора свойства производится посредством атрибута, поэтому очевидно, что класс редактора будет создан с помощью конструктора по умолчанию, т. е. конструктора без параметров. Но что делать, если нужно вызвать конструктор с параметрами? Например, я хочу передавать параметр resizable, означающий возможность изменения размеров окна (разумеется, это только пример, особого практического смысла этот параметр не несет, здесь важен сам принцип передачи параметров):
Добавление специальной области в редактор формы
Добавлено Vadik Дата: 30 January, 2011 категория: C#, КомпонентыСервис iSpiitwindowService позволяет добавить в редактор формы дополнительную область, похожую на ту, в которой располагаются невизуальные компоненты. Следует учитывать, что этот сервис недокументирован и, кроме того, является внутренним (internal). Пользоваться им следует с большой осторожностью!