« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
    Популярное
JavaScript - добавление строк в таблицу

Несколько слов о том, как работают роботы (spiders) поисковых машин.

Функция IsClipboardFormatAvailable

Функция GlobalFree

Загрузка битового образа из ресурса программы

Состав электронной модели декларации

ГЛАВА 13. Перегрузка операторов и нестандартные преобразования

Реализация уровневых драйверов

Динамические массивы в Delphi

Новые возможности интеграции: BizTalk Adapter Pack. Станислав Кондратьев, Microsoft




    Архив файлов



    Сообщества



    Документация

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


отправить ссылку другу версия для печати  Обсудить на форуме

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



Источник: http://jenyay.net

Файлы

Исходники библиотеки и примера использования: wizard_src.zip
Сборка Wizard.dll и скомпилированный пример использования: wizard.zip



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

Библиотека предназначена для создания мастера (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.

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

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

WelcomePage.png: 585x496, 14k (26.05.2007 23:42)

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

Page2.png: 585x496, 13k (26.05.2007 23:42)

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

page3_c.png: 585x496, 12k (26.05.2007 23:42) Page3_d.png: 585x496, 12k (26.05.2007 23:42)

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

ResultPage.png: 585x496, 11k (26.05.2007 23:42)




Рубрика: .NET GUI




Google Developer Day 2008 в Москве.

Мероприятия

Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.


Подробнее... | Рубрика: Мероприятия | Добавлено: 05.09.2008

ТОП 10 самых раздражающих факторов для программиста.

Разное

Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…


Подробнее... | Рубрика: Разное | Добавлено: 03.09.2008

Windows Server 7, 8 и 9.

Windows Server 2003

К написанию этой статьи меня побудили недавние изыскания Мэри Джо Фоли (Mary Jo Foley) по поводу Windows 7 Server и Windows Server 2008 R2. Если бы не она, я, наверное, и не вспомнил бы о массе информации, имеющейся по этому поводу у меня. Если вы не слышали, Microsoft удалось смутить львиную долю пользователей своим заявлением о том, что Windows Server 2008 R2, чей релиз должен состояться в 2010 году, есть ничто иное, как Windows 7 Server.


Подробнее... | Рубрика: Windows Server 2003 | Добавлено: 03.09.2008

Остальные статьи:

jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения
Windows 7: под покровом тайны


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 122
Пользователей: 0