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

Правила изменения размера и положения компонента

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

Дизайнер компонента позволяет редактировать его положение и размеры, причем каждый компонент сам определяет, какие именно параметры доступны для редактирования. По умолчанию визуальный компонент позволяет изменять размеры как по горизонтали, так и по вертикали, но распространять такое поведение на все компоненты было бы не совсем корректно. Например, для компонента, являющегося разделительной линией (bevel), правильнее было бы запретить менять вертикальный размер, если это горизонтальная разделительная линия. И, наоборот, запретить менять горизонтальный размер для вертикального разделителя.

Читать »

Использование стандартных редакторов типов

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

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

Редактирование коллекций

Читать »

Класс SimplePropertyDescriptor

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

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

Читать »

Расположение компонентов друг на друге

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

Класс ParentcontrolDesigner реализует дизайнер, предназначенный для компонентов, которые содержат другие компоненты или сами содержатся в других компонентах. Этот класс имеет множество дополнительных свойств и методов, но наиболее интересны два (и еще про одно свойство я расскажу в следующем разделе):

Читать »

Добавление и удаление свойств, событий и атрибутов компонентов

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

В разд. 6.6 я показывал, как делать фильтрацию свойств, и событий с помощью методов дизайнера. Те же действия можно выполнить, зарегистрировав дополнительный сервис фильтра HypeDescriptorFilterService. В ОТЛичие от предыдущих сервисов, сервисы фильтров организуют цепочку, последовательно вызывая друг друга. Соответственно, при регистрации сервиса мы должны позаботиться, чтобы новый фильтр вызывал предыдущий. Для этого в переменную oldservice мы сохраним ссылку на предыдущий сервис (листинг 7.17) и будем использовать ее при вызове предыдущего фильтра:

Читать »

Линии взаимного расположения компонентов

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

Типы линий привязки взаимного расположения компонентов (см. разд. 2.2) определяются перечислением SnapLineType:

Q SnapLineType.тор— горизонтальная линия по верхней границе компонентов;

?     SnapLineType.Bottom— горизонтальная линия по иижией границе компонентов;

Читать »

Класс Component

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

Что же такое компонент? С точки зрения кода, компонент— это класс, реализующий интерфейс System. ComponentModel. IComponent. "Минимальный" базовый класс, реализующий этот интерфейс, — это System.Component- Model. Component, т.е. он является базовым классом для всех компонентов, поддерживающих режим разработки. Этот класс реализует три интерфейса:

Читать »

Добавляем информацию о свойствах

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

Откроем окно свойств нашего компонента (например, с помощью меню Property по щелчку правой кнопки мыши). Как видно из рис. 5.4, два наших новых свойства видны в списке, но, к сожалению, совершенно неинформативны.

Добавить информацию о свойствах позволяют специальные атрибуты

Читать »

Редакторы свойств

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

Каждое свойство, в зависимости от его типа, имеет свой редактор свойств. Среда VS предоставляет редакторы для всех стандартных свойств, которые показаны на рис. 2.9—2.15:

О простой редактор текстовых и числовых полей позволяет изменять все свойства с типом string, int: и т. п.;

Читать »

Выпадающий диалог

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

Как я уже говорил, выпадающий диалог оформляется в виде визуального компонента (наследника класса control) и регистрируется с помощью вызова метода сервиса DropDownControl (myEditorcontroi). Диалог обычно закрывается, когда пользователь выберет новое значение или откажется от выбора (например, нажмет клавишу <Esc>). Программное закрытие окна можно выполнить, вызвав метод CloseDropDown () .

Читать »

Нотификации о смене дизайнера

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

Каждый раз при открытии дизайнера формы Visual Studio создает соответствующий класс дизайнера. При закрытии формы этот объект уничтожается. Кроме того, при переключении между страницами редактора текущий активный дизайнер (active designer) переключается в соответствии с выбранной страницей. Получать уведомления о смене дизайнера позволяет сервис IDesignerEventService, который имеет следующий список свойств и событий:

Читать »

Преимущества модели провайдеров

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

За время развития языков программирования были сделаны разные попытки хранить данные о расположении элементов. В первых версиях Delphi это были dfm-файлы бинарного вида, хранящие информацию времени выполнения, В более поздних версиях появилась возможность хранить такие файлы в текстовом внде. В Visual Basic такая информация хранилась в специальных frm-файлах н т. д.

Читать »

Виртуальные свойства

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

В предыдущем разделе мы удаляли свойство из списка свойств. Было бы логично разобраться с тем, как добавлять свойства в этот список, т. е. создавать дополнительные свойства компонента, которые существуют только в режиме разработки. Посмотрите, например, на свойства группы Design (рис. 6.8). Свойства GenerateMember, Locked являются виртуальными. Реально у компонента GradientLabel таких свойств нет.

Читать »

Динамическое управление сериализацией

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

Атрибуты DesignerSerializationVisibility И DefaultValue определяют необходимость сериализации статически, т. е. в конструкторы этих методов передаются константы. Если же необходимо управлять сериализацией программно, то нужно использовать другой способ: вместо статических атрибутов нужно сделать метод, имя которого состоит из строки shouldserialize и имени свойства. Например, для управления сериализацией свойства BackColor будет использоваться метод shouidSeriaiizeBackCoior. В случае свойства strings метод управления должен называться shouidseriaiizestrings (листинг 10.7). Использовать одновременно и метод управления, и атрибуты нельзя.

Читать »

Свойства и события

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

Любой компонент взаимодействует с внешним миром с помощью свойств и событий. Свойства (properties) позволяют настраивать и получать параметры компонента, а события (events)— реагировать на происходящие внутри компонента события, программировать реакцию компонента на внешние события и т. д.

Читать »