Search code examples
vb.netshowdialog

Visual Basic 2012: Passing variable from one form to another


I have two forms, the main (Main.vb) program window and a pop-up that appears when the program is started (getInitialBalance.vb). I need to get a value entered into the PopUp window from the popup window to the Main program. The relevant code is shown below:

getinitialbalance.vb

Public Class GetInitialBalance
    Public initialBalance As Integer

    Private Sub btnApplyInitialBal_Click(sender As Object, e As EventArgs) Handles btnApplyInitialBal.Click
        Dim textinput As Integer = txtInitialBalance.Text
        initialBalance = textinput
        Me.Close()
    End Sub
End Class

Main.vb

Public Class Main
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        GetInitialBalance.ShowDialog()
    End Sub

    Dim localInitialBalance As Integer = GetInitialBalance.initialBalance

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(localInitialBalance)
    End Sub
End Class

Solution

  • New up the GetInitialBalance form and then when the user clicks OK on the popup dialog, grab the value initialBalance from the reference to GetInitialBalance, like this:

    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim popup As New GetInitialBalance
        If popup.ShowDialog = Windows.Forms.DialogResult.OK Then
            localInitialBalance = popup.initialBalance
        End If
    End Sub
    

    Your entire code should look like this:

    Public Class GetInitialBalance
        Public initialBalance As Integer
    
        Private Sub btnApplyInitialBal_Click(sender As Object, e As EventArgs) Handles btnApplyInitialBal.Click
            initialBalance = Convert.ToInt32(textinput)
            Me.DialogResult = Windows.Forms.DialogResult.OK
        End Sub
    End Class
    
    Public Class Main
        Dim localInitialBalance As Integer
    
        Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim popup As New GetInitialBalance
            If popup.ShowDialog = Windows.Forms.DialogResult.OK Then
                localInitialBalance = popup.initialBalance
            End If
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            MsgBox(localInitialBalance)
        End Sub
    End Class