Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

protected void cycleButton_Click(object sender, System.EventArgs e) {

 rainbowLabel.cycle;

}

Данный вызов заставляет цвета метки циклически изменяться.

Чтобы предоставить пользователям композитного элемента управления доступ к тексту в потомке

rainbowLabel
, можно добавить свойство, которое отображается в свойство
Text
потомка:

public string Text {

 get {

return rainbowLabel.Text;

 }

 set {

rainbowLabel.Text = value;

 }

}

Осталось

только реализовать
Render
. По умолчанию, если не переопределить этот метод, вызывается метод
Render
каждого элемента управления потомка. Однако, чтобы получить дополнительный контроль над этим, можно самим вызывать эти методы или, лучше, открытые экземпляры методов
RenderControl
:

protected override void Render(HtmlTextWriter writer) {

 rainbowLabel.RenderControl(writer);

 cycleButton.RenderControl(writer);

}

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

HtmlTextWriter
в метод
RenderControl
для потомка, чтобы обычным образом был вставлен HTML, созданный этим потомком. Можно использовать такой элемент управления почти так же, как и
RainbowLabel
:

<form method="post" runat="server" ID="Form1">

 <PCS:RainbowLabel2 Runat="server"

Text="Multicolored label composite" ID="rainbowLabel2" />

</form>

вместе со связанным объявлением в скрытом коде формы.

Элемент управления выборочным опросом

Теперь воспользуемся изложенной техникой и создадим более сложный специальный элемент управления. Конечный результат позволит с помощью следующего кода ASP.NET:

<form method="post" runat="server" ID="Form1">

 <PCS: StrawPoll Runat="server" ID="strawPoll1"

PollStyle="voteonly" Title="Who is your favorite James Bond?">

<PCS:Option Name="SeanConnery" Votes="101" />

<PCS:Option Name="Roger Moore" Votes="83" />

<PCS:Option Name="George Lazenby" Votes="32" />

<PCS:Option Name="Timothy Dalton" Votes="28" />

<PCS:Option Name="Pierce Brosnan" Votes="95" />

 </PCS:StrawPoll>

</form>

получить:

И когда мы нажмем на кнопку vote, изображение изменится на следующее:

Альтернативно,

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

Код ASP.NET вовлечен явно в задание свойства

Name
и
Votes
для каждого варианта
Option
. Это прекрасно подходит для данного примера, хотя можно предвидеть, что более развитая версия этого элемента управления соединится с данными для получения результатов. Однако здесь это рассматриваться не будет, так как может оказаться достаточно сложным.

При анализе кода ASP.NET такие структуры интерпретируются согласованным образом: каждый управляющий элемент-потомок интерпретируется способом, который определен в классе-построителе элемента управления, связанным с элементом управления предком. Этот построитель элемента управления, код которого мы скоро увидим, обрабатывает все вложенное внутрь элемента управления, с которым он связан, включая литеральный текст.

Нам нужно создать два элемента управления:

Option
— для хранения отдельных вариантов выбора и
StrawPoll
, который будет содержать и выводить элемент управления выборочного опроса. Оба эти элемента управления будут помещены в новый файл исходного кода:
StrawPoll.cs
.

Элемент управления Option

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

Поэтому нам потребуется:

□ Код для свойств

Name
и
Votes
(хранимых в
ViewState
)

□ Код инициализации в

CreateChildControls

□ Код для обработчика нажатия кнопки

Мы включаем также вспомогательный метод

Increment
, который будет добавлять голос к текущему счету. Этот вспомогательный метод вызывается обработчиком нажатия кнопки.

Нам понадобится также поддержка

INamingContainer
, так как мы имеем несколько экземпляров этих элементов управления со своими собственными потомками.

Код класса

Option
будет находиться в файле
StrawPoll.cs
, который мы должны добавить к проекту вместе со стандартными инструкциями namespace и
using
, согласно уже известным нам элементам управления
RainbowLabel
. Код будет иметь следующий вид:

public class Option : System.Web.UI.WebControls.WebControl, INamingContainer {

 public string Name {

get {

return (string)ViewState["_name"];

}

set {

ViewState["_name"] = value;

}

 }

 public long Votes {

get {

return (long)ViewState["_votes"];

Поделиться:
Популярные книги

Медиум

Злобин Михаил
1. О чем молчат могилы
Фантастика:
фэнтези
7.90
рейтинг книги
Медиум

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Господин моих ночей (Дилогия)

Ардова Алиса
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Господин моих ночей (Дилогия)

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Неудержимый. Книга XVI

Боярский Андрей
16. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVI

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3