Ватсон Карли
Шрифт:
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
— изменяют выведенную на экран масть на ту, которая была указана.