Aprire una Form MDIchild in unica istanza

MdiApplication

Se vuoi aprire i tuoi form child in un unica istanza, sei nel posto giusto!

Se in un’applicazione con finestra MDI, vogliamo che le nostre form child si aprano in un unica istanza, bisogna scorrere la collection MdiChildren.

Di seguito riporto il codice di una subroutine per aprire un form solo se non è già attivo, altrimenti metterò in primo piano quello esistente.

    Private Sub OpenFormChild(ByVal FormType As Type, MdiForm As Form)
        Dim myForm As Form = Nothing
        For Each child As Form In MdiForm.MdiChildren
            ' se l'oggetto prelevato dalla collection 
            ' è dello stesso tipo del form passato in 
            ' firma valoriziamo la variabile myForm
            If child.GetType().Equals(FormType) Then
                myForm = child
                Exit For
            End If
        Next
        ' Se il form non esiste
        If myForm Is Nothing Then
            ' usando CreateInstance, creiamo l'istanza
            ' per il form da aprire
            myForm = CType(Activator.CreateInstance(FormType), Form)
            ' lo associamo alla nostra finestra MDI
            myForm.MdiParent = MdiForm
            ' Visualizziamo il form()
            myForm.Show()
        Else
            ' Se il form esiste, lo visualizzo in primo piano
            myForm.WindowState = FormWindowState.Normal
            myForm.BringToFront()
        End If
    End Sub

Fate attenzione, non bisogna passare il riferimento al form, ma il tipo del form, se quando creiamo un form gli diamo il nome: frmFiglio, per ricavare il suo tipo basta utilizzare il metodo GetType(frmFiglio).

Per poter utilizzare la subroutine e richiamarla nella nostra finestra MDI, magari attraverso dei sotto menù, il codice da inserire è il seguente, dove Me è il riferimento alla finestra MDI:

OpenFormChild(GetType(frmFiglio), Me)

Alla prossima 🙂

Written by 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.