Das MDIForm in Visual Basic bietet keine eigene Methode, die alle geladenen MDI-Child-Forms auf einen Schlag entlädt. Eine solche können Sie jedoch leicht nachrüsten.
Fügen Sie in das Code-Modul eines MDI-Forms folgende Methode ein:
Public Sub UnloadChildren()
With Me
Do While Not (.ActiveForm Is Nothing)
Unload .ActiveForm
Loop
End With
End Sub
Der kleine Trick hierbei beruht darauf, dass immer mindestens eines der geladenen Child-Forms über die Eigenschaft ActiveForm des MDIForms zur Verfügung gestellt wird. Wird das gerade dort verfügbare Child-Form entladen, rutscht automatisch das nächste in der inneren Reihung der Child-Forms an seine Stelle. Nur dann, wenn kein Child-Form (mehr) geladen ist, gibt die Eigenschaft ActiveForm den Wert Nothing zurück.
Wenn Sie das nicht direkt in das MDIForm selbst einbauen möchten, sondern lieber eine im gesamten Projekt ansprechbare globale Prozedur hätten:
Public Sub MDIUnloadChildren(Optional MDIForm As MDIForm)
Dim nMDIForm As MDIForm
Dim nForm As Form
If MDIForm Is Nothing Then
For Each nForm In Forms
If TypeOf nForm Is MDIForm Then
Set nMDIForm = nForm
Exit For
End If
Next
Else
Set nMDIForm = MDIForm
End If
If Not (nMDIForm Is Nothing) Then
With nMDIForm
Do While Not (.ActiveForm Is Nothing)
Unload .ActiveForm
Loop
End With
End If
End Sub
Dieser Prozedur MDIUnloadChildren können Sie die Instanz des MDIForms Ihres Projekts (ein Projekt kann ja immer nur ein einziges MDIForm enthalten) optional als Parameter übergeben. Lassen Sie es weg, wird es, wenn überhaupt geladen, aus der Forms-Collection herausgesucht.
|