сконфигурирована как приложение запуска, можно нажать кнопку Debug, чтобы увидеть результаты работы:
Добавим также ссылку на проект
PCSCustomWebControls
в раздел тестирования приложений:
Затем
добавим инструкцию
using
в пространство имен
PCSCustomWebControlsTestApp
в
WebForm1.aspx.cs
:
using PCSCustomWebControls;
Это позволит нам использовать наши специальные элементы управления из кода, скрытого за формой.
Базовые специальные элементы управления
Как можно предположить из результатов предыдущего раздела, образец элемента управления, создаваемый по умолчанию, является версией стандартного элемента управления
(отметим, как имя класса отображается прямо в элемент ASP.NET в простом примере, только что увиденном), который является производным
из класса
WebControl
, как обсуждалось ранее. Для этого класса предоставлены два атрибута:
DefaultProperty
и
ToolboxData
. Атрибут
DefaultProperty
определяет, какое свойство будет использоваться по умолчанию для элемента управления в языках, которые поддерживают эту функциональность. Атрибут
ToolboxData
точно определяет, какой код HTML будет добавлен к странице
.aspx
, если этот элемент управления добавляется с помощью инструментальной панели Visual Studio (когда проект откомпилирован, можно добавить элемент управления в панель инструментов, конфигурируя панель инструментов для использования созданной сборки).
Класс содержит одно свойство:
Text
. Это очень простое текстовое свойство, похожее на те, которые встречались раньше. Здесь необходимо отметить только три атрибута:
□
Bindable
— показывает, может ли свойство быть связано с данными.
□
Category
— задает, будет ли свойство выводиться на страницах свойств.
□
DefaultValue
— значение по умолчанию для свойства.
Представление свойств в таком виде работает точно таким же образом, как и для специальных элементов управления, и определенно предпочтительно по отношению к представлению открытых полей.
Остальная часть класса состоит из метода
Render
. Это единственный самый важный метод для реализации при создании специальных элементов управления, так как в нем мы получаем доступ к потоку вывода для изображения содержимого элемента управления. Существует только два случая, когда этот метод не нужно реализовывать:
□ Когда создается элемент управления, не имеющий визуального представления (обычно называемый компонентом).
□ Когда создается производный элемент из существующего элемента управления и не требуется изменять характеристики его изображения.
Специальные элементы управления могут также предоставлять специальные методы, инициировать специальные события, и отвечать производным элементам управления (если они существуют). Ниже мы рассмотрим:
□ Создание производных элементов управления
□ Создание композитных элементов управления
□ Создание более развитых элементов управления
Конечный пример будет элементом управления выбором, который разрешает пользователю голосовать за одну из нескольких возможностей, и выводить графически результаты голосования. Варианты выбора будут определяться с помощью вложенных элементов управления потомков способом, описанным ранее.
Создадим для начала простой производный элемент управления.
Производный элемент управления RainbowLabel
Для этого первого примера создадим производный элемент управления из элемента управления
Label
и переопределим его метод
Render
для вывода многоцветного текста. Чтобы держать элементы управления примера в этой главе отдельно, создадим новые файлы исходного кода, поэтому для этого элемента управления создадим новый файл