Gordon Prince
Gordon Prince

Reputation: 151

vb.net code to close another form if it is open

This is pretty rudimentary, but I can't figure it out.

I want to programmatically close form1 when form2 closes, if form1 is still open. Form2 was opened by a command button on form1.

The code on Form1 that opens Form2 is:

Dim frm As New form2
frm.Show()

What's the best way when Form2 closes to close any open copies of Form1 that are open, also?

Upvotes: 0

Views: 3222

Answers (3)

user14907359
user14907359

Reputation: 1

Supposing you have 3 forms and want to close the other two on button click

Private Sub EMPLEADOToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EMPLEADOToolStripMenuItem.Click
    If Application.OpenForms().OfType(Of BUSCAR_INDEX).Any Then
        BUSCAR_INDEX.Close()
    ElseIf Application.OpenForms().OfType(Of MIEMBROS_INDEX).Any Then
        MIEMBROS_INDEX.Close()
    End If
    EMP_INDEX.Show()
    EMP_INDEX.EmpIDTextBox.Text = EmpIDTextBox.Text
End Sub

Upvotes: -1

FRANKLIN
FRANKLIN

Reputation: 11

Add this reference to make it work.

Imports System.Linq

If Application.OpenForms().OfType(Of Form1).Any Then
   MsgBox("Form1 is open")
End If

Upvotes: 1

Alicia
Alicia

Reputation: 864

If you want to handle your two forms independently, you need to watch over them from a third form or class. So my suggestion would be to create both of them in this third class, and pass a reference of the second form to the first form so it can then open it. This way:

Public Class MyHelper

    Public Sub CreateForms()
        Dim form2 as New Form2()
        AddHandler form2.Closed, AddressOf Form2_OnClosed

        ‘ Create as many copies as you need
        Dim form1 as New Form1(form2)
        form1.Show()
    End Sub

    Protected Sub Form2_OnClosed(sender as object, e as EventArgs) 
        ‘ Same code for each form1 that has been created and opened.
        If (form1.IsOpen) Then form1.Close()
    End Sub

End Class


Public Class Form1

    Private _form2 as Form2

    Public Property IsOpen as Boolean = false

    Public Sub New(form2 as Form2)
        _form2 = form2
    End Sub

    Protected Sub MyButton_Click(sender as object, e as EventArgs) handles MyButton.Click
        ‘ You open your form here or wherever you want (even on the constructor)
        _form2.Show()
    End Sub

    Protected Sub Me_OnClosed(sender as object, e as EventArgs) handles Me.Closed
        Me.IsOpen = false
    End Sub

    Protected Sub Me_OnShown(sender as object, e as EventArgs) handles Me.Shown
        Me.IsOpen = true
    End Sub

End Class

Upvotes: 1

Related Questions