Книга: C# для профессионалов. Том II
Добавление обработчика событий
Добавление обработчика событий
Часто при использовании специальных элементов управления желательно инициировать специальные события и предоставить пользователям элемента управления действовать в соответствии с этим. В случае элемента управления выборочного опроса было бы хорошо иметь событие Voted
, которое будет уведомлять форму, что голосование выполнено, и предоставлять ей всю информацию, необходимую для действия в этом случае.
Чтобы зарегистрировать специальное событие, надо добавить в элемент управления код, аналогичный представленному ниже:
public event EventHandler Voted;
protected void OnVoted(EventArgs e) {
Voted(this, e);
}
Тогда, как только нам понадобиться инициировать событие, мы просто вызываем метод OnVoted()
, передавая аргументы события.
Когда вызывается OnVoted()
, инициируется событие, в соответствии с которым может действовать пользователь. Чтобы сделать это, пользователю необходимо зарегистрировать обработчик событий для этого события:
strawPoll1.Voted += new EventHandler(this.StrawPoll1_OnVoted);
Пользователь должен также предоставить код обработчика strawPoll1_OnVoted()
. Мы слегка расширим этот метод, добавляя специальные аргументы для события, чтобы сделать доступным элемент управления Option, который инициирует событие. Назовем наш объект специального аргумента OptionEventArgs
и определим его в StrawPoll.cs
следующим образом:
public class OptionEventArgs : EventArgs {
public Option originatingOption;
}
Добавляем дополнительное открытое поле в существующий класс EventArgs
. Так как мы изменили используемые аргументы, нам потребуется также специализированная версия представителя EventHandler
, которая может объявляться в пространстве имен PCSCustomWebControls
следующим образом:
public delegate void Option EventHandler(object sender, OptionEventArgs e);
Можно использовать эти примеры в StrawPoll
следующим образом:
public class StrawPoll : System.Web.UI.WebControls.WebControl, INamingContainer {
private string title = "Straw Poll";
private pollStyle currentPollStyle = pollStyle.voteandvalues;
public event OptionEventHandler Voted;
protected void OnVoted(OptionEventArgs e) {
Voted(this, e);
}
Также мы имеем метод для инициирования события, вызываемый из элементов управления потомков Option
при нажатии кнопки голосования:
public void ChildVote(OptionEventArgs e) {
OnVoted(e);
}
Наконец, нужно сделать дальнейшую модификацию обработчика события кнопки голосования в Option
, чтобы вызывать этот метод, задавая для него правильные параметры:
protected void btnVote_Click(object sender, System.EventArgs e) {
Increment();
StrawPoll parent = (StrawPoll)Parent;
if (parent.PollStyle == pollStyle.voteonly) {
parent.PollStyle = pollStyle.valuesonly;
}
OptionEventArgs eOption = new OptionEventArgs();
eOption.originatingOption = this;
parent.ChildVote(eOption);
}
Теперь можно реализовать обработчик событий на странице с помощью элемента управления. Мы должны просто определить его на странице ASP.NET, добавляя метку для использования в обработчике.
<form method= post runat="server">
<PCS:StrawPoll>
title="Who is your favorite James Bond?"
Runat="server" PollStyle="voteonly">
<PCS:Option Name="Sean Connery" 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>
<br> <br>
<asp:Label Runat= "server" Text="No vote cast." />
</form>
вместе со связанным объявлением в скрытом коде формы, если он не добавляется автоматически:
public class WebForm1 : System.Web.UI. Page {
protected StrawPoll strawPoll1;
Затем сделаем что-нибудь в самом обработчике событий:
protected void strawPoll1_OnVoted(object sender, OptionEventArgs e) {
result.Label.Text = "You voted for " + e.originatingOption.Name + ".";
}
Теперь, после голосования мы получаем ответную реакцию на наш голос:
- 17.3.3. Область видимости обработчика событий
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- 6.3. Добавление фоновой музыки
- Расширение механизма событий
- Добавление, изменение и удаление элементов списка
- Добавление, изменение и удаление столбцов списка
- Добавление и изменение представления списка
- Добавление документов
- Добавление рисунков
- Добавление цели в рабочую область для собраний
- Добавление повестки в рабочую область для собраний
- Добавление участников в рабочую область