} else {

     iPercentage = 0;

    }

    writer.Write('<ТD bgcolor='#FFFFDD'><TABLE width='100%'>'

     + '<TR><TD><TABLE border='1' bordercolor= 'black' '

     + ' width= '100%' cellpadding='0' ' + ' cellspacing='0'>');

    writer.Write('<TR><TD bgcolor='red' width='' + iPercentage

     + '%'><FONT соlor='red'>.</FONT></TD>');

    writer.Write<'TD bgcolor='white' width='' + (100-iPercentage) +

     '%'><FONT color='white'>.' +

     '</FONT></TD></TR></TABLE></TD>');

    writer.Write('<TD width='75'>' + сurrentOption.Votes +

     ' (' + iPercentage + '%)</TD><TR></TABLE></TD>');

   }

   // Конец строки

   writer.Write('</TR>');

  }

  // показать общее тело голосов, если выводятся значения

  if (currentPollStyle != pollStyle.voteonly) {

   writer.Write('<TR><TD bgcolor='#FFFFDD' colspan='' +

    iColumns + ''>Total votes cast: ' + iTotalVotes + '</TD></TR>');

  }

 }

 // Завершить таблицу

 writer.Write('</TABLE>');

}

Если выборочный опрос выводится в режиме voteonly, то голосование должно инициировать изменение изображения в режиме valuesonly. Чтобы сделать это, нам потребуется небольшое изменение в обработчике кнопки голосования в классе Option:

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

 Increment();

 StrawPoll parent = (StrawPoll)Parent;

 if (parent.PollStyle == pollStyle.voteonly) {

  parent.PollStyle = pollStyle.valuesonly;

 }

}

Теперь все готово к проведению голосования.

Добавление обработчика событий

Часто при использовании специальных элементов управления желательно инициировать специальные события и предоставить пользователям элемента управления действовать в соответствии с этим. В случае элемента управления выборочного опроса было бы хорошо иметь событие 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);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату