A veces necesitamos llamar a una función o sub presente en todos los formularios abiertos de un tipo en concreto o simplemente iterar entre formularios abiertos para cerrarlos o para realizar cualquier otro tipo de acción.
En esta entrada te enseño a iterar una acción o a hacer un loop a través de todos los formularios abiertos de varias formas para que tu puedas escoger e implementar la que mejor se adapte a tus necesidades.
Cerrar todos los formularios
Este ejemplo nos sirve para cerrar todos los formularios con un nombre o un texto predeterminado pero no nos serviría para llamar a una función o sub.
Dim forms As Form() = Application.OpenForms.Cast(Of Form)().ToArray()
For Each thisForm As Form In forms
If thisForm.Text = "Contacto" or thisForm.Name = "Form2" Then
thisForm.Close()
thisForm.Dispose()
End If
Next
Llamar a una función en todos los formularios de un tipo determinado
Este ejemplo nos serviría para poder llamar a una función o sub dentro de un tipo concreto de formulario pero no nos serviría para cerrarlos ya que al cerrarlos se modifica la colección y nos daría un error.
For Each f As Form2 In Application.OpenForms.OfType(Of Form2)
f.MiFuncion(Argumentos)
f.MiSubPreferida()
Next
Cerrar todos los formularios menos el principal
Si lo que queremos es cerrar un tipo de formulario en concreto, por ejemplo todos los Form2 dejando abierto un formulario principal (Form1) podemos usar este código:
Dim forms As Form() = Application.OpenForms.Cast(Of Form)().ToArray()
For Each thisForm As Form In forms
If thisForm.Name <> "Form1" Then
thisForm.Close()
thisForm.Dispose()
End If
Next
Espero que te sirva de ayuda, si es así deja un comentario más abajo y te lo agradeceré eternamente.