Switching back and forth between forms Topic 1: Switching to another form from the project startup form

I use the following code that calls an instance of my form for payment (frmPayment) from my startup form (frmMainMenu) using a click event:

Private Sub btnPayment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPayment.Click, PaymentToolStripMenuItem.Click
        Dim frmPaymentX As New frmPayment() 'declare payment form
        Me.Visible = False
        frmPaymentX.ShowDialog() 
End Sub


Should I use something other than Me.Visible = False in handling my startup form (frmMainMenu) during my form switch?

Topic 2: Switching back to the startup form

Likewise, I use the following code to return to my startup form (frmMainMenu) from my form for payment (frmPayment):

Private Sub btnMainMenu_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles btnMainMenu.Click
        frmMainMenu.Show()
        Me.Close()
End Sub



Should I directly call my startup form (frmMainMenu) as I am doing in my example or should I be calling an instance of my starup form (frmMainMenu)?
I believe that I should use show() and not showdialog() for this.  Is this correct?
Should I use something other than Me.Close()?
Firstly, I think you need to clarify why you are wanting to show the payment form and hide the main form. In most applications, when you want to show a dialog of some description, you would show it modally (using dialog.ShowDialog()) so that it appears over the top of your current form and prevents the user from interacting with the other form until the opened dialog is closed.

Secondly, if you are wanting your current main form and payment dialog as two screens as opposed to a form and a dialog, then you may be better off creating some shell form that can contain a UserControl. You can then build the main form and payment form as two UserControl's and simply switch which is being displayed on your window.