Хорошие шаблоны для создания мастера?

Я обычно использую TabControl и каким-то образом скрываю вкладки и перемещаюсь по ним.

Меня интересуют другие способы сделать это!!!


person Community    schedule 19.03.2010    source источник
comment
Саурон использовал устройство RingControl для волшебников, но я думаю, что это было слишком.   -  person FrustratedWithFormsDesigner    schedule 20.03.2010
comment
@FrustratedWithFormsDesigner: где я могу получить такой контроль?   -  person Luiscencio    schedule 20.03.2010


Ответы (2)


Вы можете использовать набор объектов Panel, со всеми панелями, кроме первой, для свойства Visible установлено значение false.

Сохраните индекс текущей панели и используйте кнопки «Далее» и «Предыдущий», которые соответствующим образом изменяют этот индекс. При изменении этого индекса сделайте соответствующие панели видимыми/невидимыми по мере необходимости (в данный момент времени должна быть видна только текущая панель).

Вы также можете обработать событие IsVisibleChanged на некоторых/всех ваших панелях, чтобы инициировать определенное поведение при переходе пользователя на определенную панель.

person Community    schedule 19.03.2010

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

Основные элементы:

  • Панель заголовка
  • Панель содержимого
  • Панель действий
  • Боковая панель

Как панель содержимого, так и панель действий используют ParentControlDesigner для включения элементов управления. Панель содержимого не позволяет вам перейти прямо на нее, вместо этого вы можете перейти на активную страницу (подпанель). Панель действий также имеет режим «по умолчанию», в котором создаются стандартные 4 кнопки (предыдущая, следующая, отмена, окончание). В основном я реализовал пользовательский режим, чтобы я мог его скинировать, то есть использовать кнопки DevEx вместо стандартных кнопок Winforms.

Заголовок в основном статичен, это PictureBox и Label с настраиваемыми изображением, текстом и шрифтом. (По умолчанию текст совпадает с заголовком страницы, а шрифт — это шрифт элемента управления с добавленным полужирным шрифтом).

Затем есть набор структур данных, предоставляемых API:

  • Шаги (с названием, заголовком и т. д., также укажите, должны ли они быть связаны на боковой панели)
  • Рабочие процессы (т. е. куда вы перейдете в зависимости от вашего выбора)
  • События проверки (как синхронные, так и асинхронные)
  • Действия (выполняемые до/после смены страницы, нажатия кнопок и т. д.)
  • Эффекты перехода (я сделал их для развлечения, пользователям они нравятся)

Я собрал пользовательский редактор коллекций для шагов, которые, в свою очередь, создают вложенные панели для панели содержимого, как описано выше. Каждая панель просто добавляется прямо в коллекцию элементов управления, но в каждый момент времени видна только одна панель в зависимости от свойства активного шага. Я помню, что стыковка никогда не работала должным образом, поэтому мне пришлось переопределить все методы изменения размера. Мне так и не удалось создать смарт-тег, чтобы легко переключаться между страницами, но активную страницу (или индекс страницы) можно выбрать в сетке свойств.

Затем мне также пришлось включить целую кучу хуков для вставки любой пользовательской логики на отдельные страницы. Трудно действительно вдаваться в подробности здесь, не публикуя весь код.

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

Имейте в виду, что все это было сделано с целью создания повторно используемого компонента Wizard, потому что нам нужно было разработать около 10 из них для конкретного приложения (и это пригодится и для других проектов). Если бы мне просто нужно было собрать один быстрый мастер, я, вероятно, не стал бы мучиться со всеми этими трудностями, я бы просто делал то, что делаете вы, — использовал элемент управления вкладками и несколько панелей потока. Или, что еще лучше, я бы использовал готовый элемент управления мастера, который сейчас доступен во многих библиотеках Winforms, например в библиотеке DX.

person Community    schedule 19.03.2010