Бібліотека для створення майстра (wizard) під. NET Framework 2.0 (вихідні коди), Різне, Програмування, статті

Постановка завдання


Бібліотека призначена для створення майстра (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. Створити сторінки майстра, для цього:



3. Створити клас примірника WizardManager.
4. Викликати майстра через метод Start.



Приклад використання


В архіві знаходиться також приклад використання. Він містить п’ятисторінкову майстер. Перша сторінка є вітає, на ній не задаються параметри.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*