none
Алгоритм работы визарда (мастера инсталляции) RRS feed

  • Вопрос

  • При запуске инсталлятора появляется первое окно с кнопкой далее, затем как бы второе с той же кнопкой... так вот интересует алгоритм формирования следующего шага. При нажатии на кнопку далее появляется действительно другая форма или на той же форме меняется набор элементов управления?
    23 октября 2012 г. 4:01

Ответы

  • В том то и дело что набор элементов управления на следующем шаге зависит от выбора на текущем. Не достаточно будет переместить панель в начало Z-порядка.
    Не припомню визарда, где следующий шаг строится на основе, например введенного текста, поэтому говорить о динамическом создании следующего шага не имеет смысла. Вы просто создаете все возможные варианты панелей (но не все они будут показаны), а далее просчитываете какая должна появится в результате выбранного пункта и BringToFront для нее.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа dedulek 26 октября 2012 г. 7:24
    25 октября 2012 г. 7:22
    Отвечающий

Все ответы

  • Скорее всего во фрейме отображается новая страница.
    23 октября 2012 г. 4:30
    Модератор
  • Если бы менялись формы, то скорей всего это было бы заметно (открытие нового окна, закрытие старого). Так что скорей всего это происходит внутри одного окна.

    Для связи [mail]

    23 октября 2012 г. 9:37
  • Если бы менялись формы, то скорей всего это было бы заметно (открытие нового окна, закрытие старого). Так что скорей всего это происходит внутри одного окна.
    Согласен. Обнаружил что если после нажатия кнопки далее окно перемещать каждый раз в сторону, то после возврата через "назад" окно остается на том же месте. Это говорит о том что окно одно, а меняется его содержимое. Неужели в форме присутствует куча панелей которым в свою очередь меняется свойство visible ?
    24 октября 2012 г. 4:03
  • Согласен. Обнаружил что если после нажатия кнопки далее окно перемещать каждый раз в сторону, то после возврата через "назад" окно остается на том же месте. Это говорит о том что окно одно, а меняется его содержимое. Неужели в форме присутствует куча панелей которым в свою очередь меняется свойство visible ?

    Каждый разработчик использует свой алгоритм и к слову я встречал визарды, где каждый пункт был отдельным окном (выявлялось как и у вас, по движению окна). Чаще всего используются панели с нужным набором инструментов. Когда я писал на WinForms я не мучился со свойством Visible, а просто использовал BringToFront , то есть двигал панели по Zпорядку. Панели имели имя типа PanelN, где N это номер панели в очереди мастера. Кнопка "Далее" прибавляла к некой переменной 1-ку, а "Назад" вычитала и запусказлась функция, которая вызывала метод BringToFront для панели с текущим номером и та выскакивала поверх всех. Такой подход позволяет легко сохранять действия пользователя на предыдущей панели, а так же в конце брать все настройки из каждой панели и на основе этого делать нужную операцию. Ну а в визардах по сложнее, где тип следующего диалога будет зависеть от галочек в текущем, придется логику слегка совершенствовать, но в целом суть та же - BringToFront


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа dedulek 24 октября 2012 г. 11:23
    • Снята пометка об ответе dedulek 24 октября 2012 г. 11:31
    24 октября 2012 г. 7:46
    Отвечающий
  • В том то и дело что набор элементов управления на следующем шаге зависит от выбора на текущем. Не достаточно будет переместить панель в начало Z-порядка.
    • Изменено dedulek 24 октября 2012 г. 11:30
    24 октября 2012 г. 11:29
  • Почему? У вас же ограниченное количество состояний? Описываете дерево переходов, при нажатии на Next вызываете функцию, которая определяет текущее состояние и какую панель следующей показывать.
    24 октября 2012 г. 12:20
    Модератор
  • В том то и дело что набор элементов управления на следующем шаге зависит от выбора на текущем. Не достаточно будет переместить панель в начало Z-порядка.
    Не припомню визарда, где следующий шаг строится на основе, например введенного текста, поэтому говорить о динамическом создании следующего шага не имеет смысла. Вы просто создаете все возможные варианты панелей (но не все они будут показаны), а далее просчитываете какая должна появится в результате выбранного пункта и BringToFront для нее.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа dedulek 26 октября 2012 г. 7:24
    25 октября 2012 г. 7:22
    Отвечающий