Я обычно использую TabControl
и каким-то образом скрываю вкладки и перемещаюсь по ним.
Меня интересуют другие способы сделать это!!!
Я обычно использую TabControl
и каким-то образом скрываю вкладки и перемещаюсь по ним.
Меня интересуют другие способы сделать это!!!
Вы можете использовать набор объектов Panel
, со всеми панелями, кроме первой, для свойства Visible
установлено значение false
.
Сохраните индекс текущей панели и используйте кнопки «Далее» и «Предыдущий», которые соответствующим образом изменяют этот индекс. При изменении этого индекса сделайте соответствующие панели видимыми/невидимыми по мере необходимости (в данный момент времени должна быть видна только текущая панель).
Вы также можете обработать событие IsVisibleChanged
на некоторых/всех ваших панелях, чтобы инициировать определенное поведение при переходе пользователя на определенную панель.
Это довольно сложная тема; Около двух лет назад я создал достаточно полный элемент управления Wizard для домашнего использования, и я помню, что потребовалось несколько недель, чтобы заставить его работать правильно.
Основные элементы:
Как панель содержимого, так и панель действий используют ParentControlDesigner
для включения элементов управления. Панель содержимого не позволяет вам перейти прямо на нее, вместо этого вы можете перейти на активную страницу (подпанель). Панель действий также имеет режим «по умолчанию», в котором создаются стандартные 4 кнопки (предыдущая, следующая, отмена, окончание). В основном я реализовал пользовательский режим, чтобы я мог его скинировать, то есть использовать кнопки DevEx вместо стандартных кнопок Winforms.
Заголовок в основном статичен, это PictureBox
и Label
с настраиваемыми изображением, текстом и шрифтом. (По умолчанию текст совпадает с заголовком страницы, а шрифт — это шрифт элемента управления с добавленным полужирным шрифтом).
Затем есть набор структур данных, предоставляемых API:
Я собрал пользовательский редактор коллекций для шагов, которые, в свою очередь, создают вложенные панели для панели содержимого, как описано выше. Каждая панель просто добавляется прямо в коллекцию элементов управления, но в каждый момент времени видна только одна панель в зависимости от свойства активного шага. Я помню, что стыковка никогда не работала должным образом, поэтому мне пришлось переопределить все методы изменения размера. Мне так и не удалось создать смарт-тег, чтобы легко переключаться между страницами, но активную страницу (или индекс страницы) можно выбрать в сетке свойств.
Затем мне также пришлось включить целую кучу хуков для вставки любой пользовательской логики на отдельные страницы. Трудно действительно вдаваться в подробности здесь, не публикуя весь код.
Чтобы правильно спроектировать и протестировать, требуется довольно много времени, но я не помню, чтобы использовал какие-либо хитрости дизайна, просто нужно было методично подходить к проблеме, как уже упоминалось, с точки зрения отдельных элементов пользовательского интерфейса (как во время выполнения, так и во время разработки) и структуры данных и как они взаимодействуют.
Имейте в виду, что все это было сделано с целью создания повторно используемого компонента Wizard, потому что нам нужно было разработать около 10 из них для конкретного приложения (и это пригодится и для других проектов). Если бы мне просто нужно было собрать один быстрый мастер, я, вероятно, не стал бы мучиться со всеми этими трудностями, я бы просто делал то, что делаете вы, — использовал элемент управления вкладками и несколько панелей потока. Или, что еще лучше, я бы использовал готовый элемент управления мастера, который сейчас доступен во многих библиотеках Winforms, например в библиотеке DX.
RingControl
для волшебников, но я думаю, что это было слишком. - person FrustratedWithFormsDesigner   schedule 20.03.2010