(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Библиотека для создания мастера (wizard) под .NET Framework 2.0 (исходники)

Источник: PmWiki

Постановка задачи

Библиотека предназначена для создания мастера (wizard) таким образом, чтобы последовательность прохождения его страниц могла бы быть нелинейной в зависимости от действий пользователя. Есть возможность откатываться на предыдущие страницы. При этом библиотека не определяет (или не навязывает) как должны выглядеть страницы, по умолчанию страница представляет собой пустое окно с тремя кнопками: "Вперед", "Назад" и "Отмена".

Реализация

Библиотека состоит из двух классов - WizardPage для создания страниц мастера и WizardManager для управления страницами. Давайте рассмотрим их поближе.

ParamsT

Сначала рассмотрим параметр обобщений (generics) для всех классов. В качестве ParamsT может выступать любой класс, который содержит в себе все параметры, которые надо собрать на страницах мастера. Как он будет реализован зависит от программиста, я обычно делаю его обычным классом, который содержит набор public-полей, значения которых постепенно устанавливаются на каждой странице перед переходом на следующую страницу. Единственное требование от ParamsT, он должен иметь конструктор по умолчанию, т.к. экземпляр этого класса создается автоматически при создании мастера.

WizardPage

Это обобщенный класс, производный от UserControl. В качестве параметра обобщения он принимает тип ParamsT, который был описан выше. Хотя этот класс и содержит public-конструктор, но использовать его не следует, потому что этот конструктор оставлен для использования дизайнером. А вместо этого следует пользоваться следующим конструктором:

public WizardPage (WizardManager<ParamsT> wizard, WizardPage<ParamsT> prevPage)

Здесь первый параметр - экземпляр класса WizardManager, который будет описан ниже, а второй параметр - страница, которая будет считаться предыдущей по отношению к создаваемой. Если предыдущей страницы нет (например, когда это первая страница), то в качестве второго параметра надо передавать null. Кстати о первых страницах. На них желательно установить свойство кнопки next.Enabled в false.

Также надо отметить следующий виртуальный метод:

public virtual void Init ()

Этот метод вызывается перед показом страницы. Его можно использовать, например, чтобы в окне установить значения каких-то величин, которые зависят от значений, введенных пользователем на предыдущих страницах.

Через свойство Wizard можно получить доступ к классу мастера. Таким образом доступ к заполняемым параметрам внутри страниц осуществляется с помощью вызова this.Wizard.Params.

Теперь о навигации между страницами. На кнопки "Отмена" и "Назад" уже повешены обработчики по умолчанию, которые вызывают виртуальные методы Cancel() и Back() соответственно. По умолчанию метод Cancel() присваивает свойству WizardManager.DialogResult значение DialogResult.Cancel и закрывает окно мастера:

protected virtual void Cancel ()
{
        this.Wizard.DialogResult = DialogResult.Cancel;
        this.Wizard.Close ();
}

Метод Back() указывает мастеру перейти на предыдущую страницу.

А вот обработчик для кнопки next необходимо указать самостоятельно. Во-первых, в этом обработчике должен находиться код для заполнения тех параметров, которые пользователь вводит на текущей странице. А, во-вторых, внутри этого обработчика надо создать следующую страницу и указать мастеру перейти на нее. Как это делается написано в описании класса WizardManager чуть ниже. Если текущая страница является последней, то разумно поменять текст этой кнопки на слово "Финиш", а в обработчике нажатия на кнопку необходимо присвоить свойству WizardManager.DialogResult значение DialogResult.OK и закрыть мастер. Например, обтаботчик события может выглядеть так:

private void next_Click (object sender, EventArgs e)
{
        this.Wizard.DialogResult = System.Windows.Forms.DialogResult.OK;
        this.Wizard.Close ();
}

WizardManager

Обобщенный класс WizardManager<ParamsT> является производным от класса Form, а страницы мастера являются просто контролами, которые по очереди показываются и растягиваются на все окно.

Внутри класса WizardManager хранятся заполняемые параметры, доступ к которым можно получить через свойство Params.

Переход на новую страницу осуществляется через вызов метода SetPage(), который принимает в качестве параметра страницу, которую необходимо установить в качестве текущей. Как происходит установка новой страницы видно из исходника:

public void SetPage (WizardPage<ParamsT> page)
{
        if (_currentPage != null)
        {
                _currentPage.Hide ();
                Controls.Remove (_currentPage);
        }

        page.Dock = DockStyle.Fill;
        page.Parent = this;
        Controls.Add (page);

        _currentPage = page;
        _currentPage.Visible = true;
        _currentPage.Init ();
}

Для создания используется конструктор без параметров, а запуск мастера осуществляется через метод Start(), в качестве аргумента которому передается указатель на первую страницу мастера. О результате работы мастера (завершился ли он или был прерван) можно узнать по возвращаемому значению DialogResult метода Start().

Шпаргалка по использованию библиотеки

Сведем все действия, которые необходимо проделать для использования этой библиотеки в небольшую шпаргалку.

1. Создать класс с параметрами, которые заполняются по мере прохождения мастера пользователем. Этот класс должен иметь конструктор без параметров. Назовем его WizParams.
2. Создать страницы мастера, для этого:

  • Создать класс-прокси (пусть он называется WizardPageProxy), производный от WizardPage<WizParams>, который реализует два конструктора public WizardPageProxy (WizardManager<WizParams> wizard, WizardPageProxy prevPage) и WizardPageProxy (). Этот промежуточный класс необходим из-за того, что дизайнер Visual Studio не может работать с обобщенными классами.
  • Создать страницы мастера, производные от класса-прокси (WizardPageProxy ).
  • Реализовать те же два конструктора, что и у класса-прокси.
  • Переопределить виртуальный метод Init(), если это необходимо.
  • Создать обработчик события на нажатие кнопки next, в котором заполнить нужные данные в параметрах, создать следующую страницу и передать ее в качестве параметра метода SetPage класса WizardManager.
  • Если страница первая, то установить свойство Enabled в false для кнопки возврата назад.

3. Создать класс экземпляра WizardManager.
4. Вызвать мастера через метод Start.

Пример использования

В архиве находится также пример использования. Он содержит пятистраничный мастер. Первая страница является приветствующей, на ней не задаются параметры.

На следующей странице пользователь вводит два числе a и b и выбирает действие со следующим числом c (вычитание) или d (умножение).

Каким будет следующее окно зависит от выбора пользователя. Но каждая страница считает свое выражение (a + b - c или a + b * d) и сохраняет результат в параметры.

     

После чего показывает заключительную страницу с результатом.

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 08.12.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft 365 Business Basic (corporate)
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Apps for business (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
Программирование на Microsoft Access
Новые материалы
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100