Недавно я создал форму с уже установленными кнопками и большой панелью для каждого шага. Диалог будет принимать начальный шаг в форме экземпляра IWizStep, и все будет происходить оттуда.
Каждый шаг был классом, представляющим UserControl, ответственный за визуальный аспект шага, в то время как сама логика была обработана классом (это было немного сложнее, но это была общая идея).
Интерфейс IWizStep, реализованный на шаге и принятый в диалоге, имел вид:
Interface IWizStep
Event StateChanged As EventHandler
ReadOnly Property Control As Control
ReadOnly Property Title As String
ReadOnly Property CanMovePrevious As Boolean
ReadOnly Property CanMoveNext As Boolean
Function MovePrevious As IWizStep
Function MoveNext As IWizStep
End Interface
Чтобы собрать все воедино, класс контроллера знал бы, как составить шаги, необходимые для каждого данного действия. Поэтому у меня был контроллер, скажем, для «Emit Order», для которого требовалось около 10 шагов, и контроллер для «Emit Orders in Batch», для которого требовалось всего несколько шагов.