Search code examples
vb.netpanels

VB.NET - Navigating through stacked panels wizard style


first post here. I have a relatively bad question - but I'm new to this so bear with me.

I'm writing a simple app for a friend to track some daily problems/behaviors for reporting purposes. I was trying to use almost a wizard style, but the wizard examples I found were either needlessly complex or antiquated.

What I have is a Windows form with - for arguments sake - 5 panels, stacked on top of each other. Each panel contains a different set of controls (I wasn't able to completely re-use all of them or go in a 'template' direction). Below the panels are 3 buttons - Cancel, Back, Next.

All I want to be able to do is navigate between the panels with the Next and Back buttons. i.e. When I click 'Next', the click event sets the variable values from panel A, and then hides it and loads panel B, then Next sets the values for B and loads C and so on.

I thought I could do this with some sort of array or list of objects, but I'm not really sure the best way to go about it. I asked in another forum, and the only answer I got was to add the buttons to the panel and have them be specific to bringing forms front and back. That seems awfully inefficient and I know there's a better way to do it. Can you guys shed some light on this?


Solution

  • I personally would create a List<Of Panel> and add the Panels to it. Then use a integer and increment it between 0 to 4, using BringToFront to show the Current Panel. Something like this.

    Public Class Form1
        Dim myPanels As List(Of Panel) = New List(Of Panel)
        Dim count As Integer = 0
    
        Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
            count = 0
            myPanels(count).BringToFront()
        End Sub
    
        Private Sub btnNext_Click(sender As System.Object, e As System.EventArgs) Handles btnNext.Click
            If count < 4 Then
                count += 1
            Else
                count = 0
            End If
            myPanels(count).BringToFront()
        End Sub
    
        Private Sub bntPrevious_Click(sender As System.Object, e As System.EventArgs) Handles btnPrevious.Click
            If count > 0 Then
                count -= 1
            Else
                count = 4
            End If
            myPanels(count).BringToFront()
        End Sub
    
        Public Sub New()
    
            ' This call is required by the designer.
            InitializeComponent()
    
            myPanels.Add(Panel1)
            myPanels.Add(Panel2)
            myPanels.Add(Panel3)
            myPanels.Add(Panel4)
            myPanels.Add(Panel5)
            myPanels(count).BringToFront()
    
        End Sub
    End Class