Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 7:

Многокадровые элементы управления

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

События элемента Wizard

До сих пор мы занимались настройками Wizard в режиме проектирования, пришла пора приступить к программированию его времени выполнения. Мы уже говорили, что для разработчика задача управления объектами страницы во время выполнения сводится к созданию и программированию обработчиков событий, на которые могут реагировать эти объекты. Ниже перечислены события, на которые может реагировать экземпляр класса Wizard.

События, поддерживаемые элементом Wizard
Событие Описание
ActiveStepChanged Ага! Пользователь переключился на новый шаг или наш код изменил свойство ActiveStepIndex
CancelButtonClick Ага! Пользователь щелкнул на кнопке Cancel (Отмена). Кнопка Cancel по умолчанию не отображается, однако ее можно добавить во все представления Step сразу, если установить свойство Wizard.DisplayCancelButton="True". Кнопка Cancel инициирует обратную отсылку, и если не предусмотреть соответствующего обработчика, то ничего не происходит. Но если одновременно определено свойство Wizard.CancelDestinationPageUrl, например, CancelDestinationPageUrl="~/MultiViewControl.aspx", то по щелчку пользователя на этой кнопке ему отправляется другая страница
FinishButtonClick Ага! Пользователь дошел до последнего шага и щелкнул на кнопке Finish
NextButtonClick, PreviousButtonClick Эти события возникают при щелчке на кнопке Next или Previous на любом шаге. Но сменить шаг пользователь может и через боковую панель. Чтобы такой момент не упустить и однозначно среагировать на смену шага, лучше вместо этих событий обрабатывать событие ActiveStepIndex
SideBarButtonClick Ага! Пользователь щелкнул на ссылке в области боковой панели
Чувствуете?!!! Мы сидим со своим кодом на другом конце провода и ждем очередных пожеланий ненасытного пользователя. При получении от него очередного запроса мы анализируем выбор по присланным событиям и пакуем для него новую посылку, в которую закладываем и требуемый текущий ответ, и интерфейсные элементы для ввода новых пожеланий. Да все это еще должно быть красивым, блестящим и пушистым. Вот Большой Билл нам здесь и помогает - осталось только руки приложить.

Используем событие FinishButtonClick, чтобы усовершенствовать наш пример. Когда пользователь щелкнет в последнем шаге на кнопке Finish (Готово), соберем его выбор с каждого шага и вернем в раскрытом представлении этого последнего шага.

  • Откройте страницу WizardControl.aspx в режиме Design и перейдите на последний шаг WizardStep4 для его редактирования
  • Поместите в середину контекста текстовую метку Label из вкладки Standard панели Toolbox, присвойте ей имя lblSummary и очистите свойство Text
  • Выделите объект Wizard1 и через панель свойств в режиме Events создайте обработчик для события FinishButtonClick
  • Заполните обработчик следующим кодом
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    	
    public partial class WizardControl : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    	
        }
    	
        protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
        {
            // Библиотека Framework 2.0 в нашем распоряжении
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<h3>");
            sb.Append("Вы выбрали: <br />");
            string title;
    	
            title = WizardStep1.Title;
            sb.Append(title + ": " + DropDownList1.Text + "<br />");
    
            title = WizardStep2.Title;
            int index = RadioButtonList1.SelectedIndex;
            if(index != -1) // Если что-то выбрал
                sb.Append(title + ": " + RadioButtonList1.Items[index].Text + "<br />");
    	
            /*  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
            // Для элемента класса CheckBoxList нужно проверять коллекцию:
            CheckBoxList CheckBoxList1;
            foreach (ListItem item in CheckBoxList1.Items)
            {
                if (item.Selected)
                    sb.Append(item.Text + "; ");
            }
                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
    	
            title = WizardStep3.Title;
            if (TextBox1.Text.Length > 0)// Если что-то ввел
                sb.Append(title + ": " + TextBox1.Text + "<br /></br />");
    	
            sb.Append("</h3>");
    	
            sb.Append("Вам рекомендуется:");
    	
            // Отображаем собранные данные
            lblSummary.Text = sb.ToString();
        }
    }
  • Перейдите в режиме Design на первый шаг WizardStep1, чтобы автоматически установилось в ноль значение свойства ActiveStepIndex объекта Wizard1 и пользователю вначале отображался первый шаг
  • Выполните страницу, заполните анкету и на последнем шаге щелкните на кнопке Готово. Обработчик отобразит пользователю примерно такой результат

Стили элемента Wizard

Элемент Wizard содержит средства, позволяющие легко менять его внешний вид. В нем можно задавать собственный пользовательский интерфейс, отличный от интерфейса по умолчанию. Через высокоуровневые свойства можно управлять цветами, шрифтами, интервалами и стилями границ, настраивать внешний вид каждой кнопки, добавлять верхний колонтитул и т.д.

Например, для кнопки StartNext применяются следующие свойства:

Некоторые свойства для настройки кнопок
Свойство Описание
StartNextButtonImageUrl Задает изображение для изображения-кнопки
StartNextButtonStyle Использует стили внешней каскадной таблицы стилей CSS
StartNextButtonText Настраивает текст кнопки или ссылки
StartNextButtonType Определяет кнопку, ссылку или выбираемое изображение-кнопку

Среди свойств компонента Wizard есть общие стили, затрагивающие настройки всех элементов, а есть индивидуальные для каждой группы элементов. Следует помнить, что если одновременно определены те и другие стили, то конфликта не будет, просто индивидуальные параметры настройки переопределят (отменят) общие стили. В языках программирования используется тот же принцип, переменная локальной области видимости переопределяет (делает недоступной) в текущем блоке кода одноименную переменную внешней области видимости.

Ниже приведены свойства мастера Wizard, определяющие общие и индивидуальные стили его отдельных областей.

Свойства Wizard, определяющие стили его элементов
Стиль Описание
ControlStyle Наследуется Wizard от класса WebControl и применяется ко всем его разделам
HeaderStyle Применяется к разделу верхнего колонтитула, который будет отображаться только в том случае, если будет задан какой-нибудь текст в свойстве Wizard.HeaderText
SideBarStyle Применяется к области боковой панели с кнопками
SideBarButtonStyle Определяет стиль кнопок боковой панели
StepStyle Применяется к компонентам представления, включенным в текущий шаг
NavigationStyle Применяется к нижней области шагов, в которых расположены навигационные кнопки
NavigationButtonStyle Применяется только к кнопкам навигации в области навигации
StartNextButtonStyle Применяется к кнопке Next в первом шаге, если ее видимость задана свойством StepType=Start
StepNextButtonStyle Применяется к кнопке Next в промежуточных шагах, если ее видимость задана свойством StepType=Step
StepPreviousButtonStyle Применяется к кнопке Previous в промежуточных и последнем шагах, если ее видимость задана свойством StepType=Step
FinishPreviousButtonStyle Применяется к кнопкам Finish и Previous в последнем шаге, если их видимость задана свойством StepType=Finish
CancelButtonStyle Применяется к кнопке Cancel во всех шагах, если ее видимость задана свойством DisplayCancelButton=True

Оболочка Visual Studio 2005 позволяет существенно облегчить жизнь разработчика наличием средств автоматизации по настройке типовых стилей, которых в большинстве случаев будет достаточно. Вернемся к локальной панели задач элемента Wizard, чтобы одним махом присвоить типовой стиль нашей тестовой странице.

  • Откройте страницу WizardControl.aspx в режиме Design и выделите объект Wizard1
  • Откройте локальную панель задач объекта Wizard1, щелкнув на пиктограмме треугольника в его правом верхнем углу

  • Выполните опцию Auto Format и в появившемся диалоговом окне выберите нужный стиль

Окно Auto Format можно вызвать и через контекстное меню элемента Wizard, выполнив одноименную опцию


  • Выполните страницу и убедитесь, что она приобрела профессиональный дизайн
  • Проанализируйте дескрипторное представление страницы, чтобы выяснить, какие свойства дескрипторов стилей позволили добавить такую красоту (у меня бы такое никогда вручную не получилось!!!)

Проанализируйте дескрипторное представление страницы, чтобы выяснить, какие свойства дескрипторов стилей позволили добавить такую красоту (у меня бы такое никогда вручную не получилось!!!)

<HeaderStyle BackColor="#FFCC66" Font-Bold="True" Font-Size="0.9em" ForeColor="#333333" 
    BorderColor="#FFFBD6" BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" />
<SideBarStyle BackColor="#990000" Font-Size="0.9em" VerticalAlign="Top" />
<NavigationButtonStyle BackColor="White" BorderColor="#CC9966" BorderStyle="Solid"
    BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990000" />
<SideBarButtonStyle ForeColor="White" />

В приведенном коде каждый дескриптор настраивает свою область элемента Wizard. Обратите внимание, что приведенный блок кода настройки стилей оболочка добавляет в самый конец контейнера <asp:Wizard></asp:Wizard>, чтобы легче было искать. Если этот блок кода удалить, то мы вернемся к почти прежнему варианту стилей по умолчанию (почти, потому, что может потребоваться корректировка атрибутов еще в некоторых других местах, например, в дескрипторе <asp:Wizard> - посмотрите сами!).

  • Налюбовавшись сей красотой, вызовите контекстное меню для элемента Wizard и выполните команду Auto Format/Remove Formating, чтобы вернуться на грешную Землю к стилям по умолчанию
< Лекция 6 || Лекция 7: 12345 || Лекция 8 >