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

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

Жанры

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

Ватсон Карли

Шрифт:

public class WebForm1 : System.Web.UI.Page {

 protected PCSUserC1 myUserControl;

 ...

Это все, что нужно сделать для тестирования элемента управления пользователя, и выполнение проекта приведет к следующему результату:

 club

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

управления. 

Чтобы получить управление над выводимой мастью, можно использовать атрибут элемента

<PCS: UserC1>
. Атрибуты элементов для элементов управления пользователя автоматически отображаются в свойства элементов управления пользователя, поэтому для того, чтобы это заработало, необходимо только добавить свойство в код элемента управления
PCSUserC1.ascx.cs
. Назовем это свойство
Suit
и позволим ему принимать значение любой масти. Чтобы упростить представление состояния элемента управления, определим внутри пространства имен
PCSUserCWebAppl
перечисление для хранения четырех названий мастей:

namespace PCSUserCWebAppl {

 ...

 public enum suit {

club, diamond, heart, spade

 }

 ...

}

Для класса

PCSUserC1
требуется переменная-член для хранения типа данных suit (масть) —
currentSuit
:

public class PCSUserC1 : System.Web.UI.UserControl {

 protected System.Web.UI.WebControls.Image suitPic;

 protected System.Web.UI.WebControls.Label suitLabel;

 protected suit currentSuit;

А также свойство для доступа к этой переменной-члену,

Suit
:

public suit Suit {

 get {

return currentSuit;

 }

 set {

currentSuit = value;

suitPic.ImageUrl = currentSuit.ToString + ".bmp";

suitLabel.Text = currentSuit.ToString;

 }

}

Здесь метод доступа

set
задает URL изображения как один из файлов, скопированных ранее, а текст выводит название масти.

Теперь элемент управления закончен, и нам надо добавить код в

WebForm1.aspx
для доступа к этому новому свойству. Используем список переключателей для выбора масти:

<BODY MS_POSITIONING="GridLayout">

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

<PCS:UserC1 Runat="server" id="myUserControl" />

<asp:RadioButtonList Runat="server" ID="suitList" autopostback="True">

<asp:ListItem Value="club" Selected="True">Club</asp:ListItem>

<asp:ListItem Value="diamond">Diamond</asp:ListItem>

<asp:ListItem Value="heart">Heart</asp:ListItem>

<asp:ListItem Value="spade">Spade</asp:ListItem>

</asp:RadioButtonList>

 </form>

</BODY>

Нам

нужно также добавить обработчик событий для события списка
SelectedIndexChanged
, который мы можем сделать просто с помощью двойного щелчка мышью на элементе управления в графическом представлении.

Отметим, что нужно задать свойство autopostback этого списка как

true
, так как обработчик события
suitList_SelectedIndexChanged
не будет выполняться на сервере, если обратная отправка не задана, и этот элемент управления не включает обратную отправку по умолчанию.

Для метода

suitList_SelectedIndexChanged
требуется следующий код в
WebForm1.aspx.cs
:

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

 MyUserControl.Suit = (suit)Enum.Parse(typeof(suit), suitList.SelectedItem.Value);

}

Мы знаем, что атрибуты

value
элементов
<ListItem>
представляют допустимые значения перечисления
suit
, которое было определено ранее, поэтому мы анализируем их просто как типы перечислений (у нас здесь то же пространство имен, поэтому нам не нужно переопределять тип) и используем их как значения свойства
Suit
элемента управления пользователя. Мы преобразуем возвращаемый тип
object
в
suit
с помощью простого синтаксиса преобразования типов, и это невозможно сделать неявно.

Не нужно это усложнять, просто определим одно значение с помощью атрибута

Suit
формы Web, например:

<PCS:UserC1 Runat="server" id="myUserControl" Suit="diamond" />

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

Теперь можно изменять масть при выполнении этого приложения Web:

Затем мы зададим для элемента управления несколько методов. Это снова сделать несложно, нам нужно только добавить методы в класс

PCSUserC1
:

public void Club {

 Suit = suit.club;

}

public void Diamond {

 Suit = suit.diamond;

}

public void Heart {

 Suit = suit.heart;

}

public void Spade {

 Suit = suit.spade;

}

Эти четыре метода —

Club
,
Diamond
,
Heart
и
Spade
— изменяют выведенную на экран масть на ту, которая была указана.

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

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Маленькая хозяйка большого герцогства

Вера Виктория
2. Герцогиня
Любовные романы:
любовно-фантастические романы
7.80
рейтинг книги
Маленькая хозяйка большого герцогства

Законы Рода. Том 10

Flow Ascold
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Возмездие

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

Кровь эльфов

Сапковский Анджей
3. Ведьмак
Фантастика:
фэнтези
9.23
рейтинг книги
Кровь эльфов

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

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

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

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10