user3418036
user3418036

Reputation: 103

How to load a form again without exiting the application?

I have 2 form. Form1 and Form2. In form1 there's a button that will go to form2 if it is click. If I click that button if form1, form2 will load and integer a will become 1. If I click the button in form2, integer a will become 0 and it will back to form1. Since im in form1, if I click again the button in form1 it will go to form2 but form2 will not load again. Is theres a way to load again the form? Heres my example:

Form1:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Hide()
        Form2.Show()
    End Sub

End Class

Form2:

Public Class Form2

    Dim a As Integer = 0
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        a = 1
        MsgBox("load complete!!")
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        a = 0
        Me.Hide()
        Form1.Show()
    End Sub

End Class

Thanks in advance!

Upvotes: 0

Views: 2531

Answers (2)

Gridly
Gridly

Reputation: 938

Form2's Load method only gets called once because that is the normal life cycle for a form. The load event only gets called once before the form is loaded for the first time.

From Form.Load Event:

Occurs before a form is displayed for the first time.

The solution depends on your needs. If you need to keep the state of the form even when it is hidden then you want to use the VisibleChanged event.

Private Sub Form2_VisibleChanged(sender As Object, e As EventArgs) Handles Me.VisibleChanged
    If Me.Visible Then
        MsgBox("Visible changed")
    End If
End Sub

If you don't need to keep the state then you can discard Form 2 and recreate it:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.Hide()
    Dim Form2 = New Form2()
    Form2.Show()
End Sub


Dim a As Integer = 0
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    a = 1
    MsgBox("load complete!!")
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    a = 0
    Form1.Show()
    Me.Close()
End Sub

Upvotes: 1

Hoh
Hoh

Reputation: 1184

Just set a new instance of Form2 before you load it.

 Dim Form2 As New Form2
 Form2 .Show()

Upvotes: 0

Related Questions