The above shows a wizard created using a control I developed that can allow developers to implement wizards in their programs with very minimal coding. After referencing the assembly in your Windows Forms project, you may drag the control onto a Form and configure the wizard as you would any other control. I have attached a demo solution that shows what can be done with it. However, the control has very intuitive design time behavior which I will lay out in this post.
Design-Time
After spreading the control on a Form it should look like this:-
The control is very similar to a TabControl. In a TabControl you have to add tab pages to it. With the WizardControl, you have to add WizardPanels to it. You may quickly add panels to it via the control's smart tag.
The smart tag allows you to quickly add panels to the WizardControl at design time. You may also add panels through the the control's WizardPanels property:-
Using that property to manipulate the wizard's panels also gives you finer control in configuring the panels. You may add, remove, or re-order the panels from the collection editor. You may also adjust its properties as well.
The WizardControl's panels can be selected in the designer as well. You should note that both the WizardControl and its panels are separately selectable at design time. You may select the current panel by clicking on its surface at design time. From here you can change its properties via the property grid as you would any other control.
If you want to select the WizardControl itself in design mode while it has panels you must click on the navigation bar:-
You may select the WizardControl while it has an active panel by clicking anywhere within the red boxes outlined in the image above.
Notice that we avoid the "Next" and "Previous" buttons. That's because those buttons are clickable in design mode. They allow you to easily navigate between panels at design time so you can add, remove and configure controls dragged to their surface:-
Just like a TabControl, you drag and drop controls to the wizard's panels' surfaces.
Final Notes
Look to the next post for the attachment of the demo solution. In that solution a few things are demonstrated about using the control. The code in the solution is also commented to help explain how things are done. Suggestions, bug reports and other comments are welcomed.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
Hi Niya,
I like this Wizard control so I downloaded it and was trying to modify it for my needs. The only thing I am having an issue with is how can I move the navbar to the top instead of the bottom? Any help would be greatly appreciated.
Is there a reason you invoke twice??? generally interstested.
vb Code:
LblWaitMsg.Invoke(Sub() LblWaitMsg.Text = "Completed. You may proceed")
'The task is finished so re-enable navigation
LblWaitMsg.Invoke(Sub()
WizardControl1.AllowNext = True
WizardControl1.AllowPrevious = True
End Sub)
ah edit. It's meant to. sorry regarding panel 3
Oh. I did that for the specific reason of not confusing developers going through this code. Changing the text of the label has nothing to do with re-enabling navigation so I separated them but in practice, you should do it with a single Invoke call.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
Hi Niya,
I like this Wizard control so I downloaded it and was trying to modify it for my needs. The only thing I am having an issue with is how can I move the navbar to the top instead of the bottom? Any help would be greatly appreciated.
Missed this post. If you're still around, let me know.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
Niya, I just had a need for a wizard control and I remembered that you made one. I really like how you've incorporated the use of smart-tags and how I'm able to navigate in the designer to setup the various panels.
I have a few things that I wanted to point out though. When I added the files to my project, I needed to reference the following namespaces:
System.Design
System.ServiceProcess
I think that it is worth mentioning in your post.
Also, your code is not completely compatible with Option Strict on. In the WizardControlDesign.vb file, there were a few instances where ISelectionService and IComponentChangeService were not being cast.
Other than those extremely minor and nit picky things I love the control! As far as improvements, I'd like to see you add a 'help' button in the navigation bar.
Niya, I just had a need for a wizard control and I remembered that you made one. I really like how you've incorporated the use of smart-tags and how I'm able to navigate in the designer to setup the various panels.
I have a few things that I wanted to point out though. When I added the files to my project, I needed to reference the following namespaces:
System.Design
System.ServiceProcess
I think that it is worth mentioning in your post.
Also, your code is not completely compatible with Option Strict on. In the WizardControlDesign.vb file, there were a few instances where ISelectionService and IComponentChangeService were not being cast.
Other than those extremely minor and nit picky things I love the control! As far as improvements, I'd like to see you add a 'help' button in the navigation bar.
Don't know how I missed this post .
Anyways, I'll look into the things you mentioned when I get some spare time. Been a while since I played around with Control authoring so I'll have to re-familiarize myself with this project before making further changes.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
I'm testing your wizard in my project, it's very nice and useful.
There is a way to set buttons text? I'd like to change for istance "Next" text in "Successivo" text the value in a variable is "Italian".
Thanks for your help.
I'm testing your wizard in my project, it's very nice and useful.
There is a way to set buttons text? I'd like to change for istance "Next" text in "Successivo" text the value in a variable is "Italian".
Thanks for your help.
This is a good suggestion. Sorry I wasn't around when you made this post. It's been 7 years since I touched this project. Didn't realize it became a bit popular. I might have to dust off the code and update it.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber
Wow. I didn't realize. Did it give you any significant headaches?
None at all. I used the wizard control to setup the application settings on the application's first time loading and reused it so that they can change the settings afterwards via a button click.
My settings had basically three different "categories" so I had one set of settings in their own panel and then used the last panel as a confirmation page.
Everything worked out exactly as I expected it to.
C++ programmers will dismiss you as a cretinous simpleton for your inability to keep track of pointers chained 6 levels deep and Java programmers will pillory you for buying into the evils of Microsoft. Meanwhile C# programmers will get paid just a little bit more than you for writing exactly the same code and VB6 programmers will continue to whitter on about "footprints". - FunkyDexter
There's just no reason to use garbage like InputBox. - jmcilhinney
The threads I start are Niya and Olaf free zones. No arguing about the benefits of VB6 over .NET here please. Happiness must reign. - yereverluvinuncleber