поэтому может понадобиться добавить следующее объявление в WebForm1.aspx.cs
:
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() {