Seit jeher hat ein Zugriff auf eine Standard-Eigenschaft eines
Forms oder eines der darauf platzierten Steuerelemente zur Folge,
dass das Form geladen wird. Mindestens aus diesem Grund kann die
Information, ob ein Form bereits geladen ist oder nicht, recht
nützlich sein. Es gibt allerdings keine Form-Eigenschaft, die Ihnen
diese Information frei Haus liefern würde.
Die naheliegendste Möglichkeit ist, einfach in der
Forms-Sammlung nachzuschauen, ob das betreffende Form dort enthalten
und somit geladen ist. Da die Forms-Sammlung keinen Zugriff über
einen Namen oder Schlüssel ermöglicht, sondern nur über eine
Index-Nummer, können Sie jedoch nicht direkt ermitteln, ob das Form
in der Forms-Sammlung enthalten ist. Es bleibt Ihnen nichts anderes
übrig, ein Form aus der Sammlung nach dem anderen mit dem
betreffenden Form zu vergleichen. Ist einer dieser Vergleiche
erfolgreich, können Sie die Suchschleife mit einer Erfolgsmeldung
verlassen. Anderenfalls wird die Schleife ohne Erfolgsmeldung bis
zum Ende durchlaufen.
Public Function IsFormLoaded(Form As Form) As Boolean
Dim nForm As Form
For Each nForm In Forms
If nForm Is Form Then
IsFormLoaded = True
Exit For
End If
Next
End Function
 |
Die Funktion IsFormLoaded prüft, ob ein
Form geladen ist

|
Selbst wenn Sie die Information über Ladezustände von Forms
häufiger benötigen, brauchen Sie sich eigentlich keine Gedanken
bezüglich der Performance zu machen. Die paar wenigen geladenen
Forms in der Forms-Sammlung sind schließlich sehr schnell
durchlaufen. Und falls Sie doch einen spürbaren Performance-Verlust
wahrnehmen sollten, dann haben Sie einfach zu viele Forms
gleichzeitig geladen. Das sollte dann aber eher ein Anreiz sein, das
Design Ihrer Anwendung zu überdenken und zu optimieren, als ein
Anreiz, nach einer schnelleren Möglichkeit zur Prüfung des
Ladezustands eines Forms zu suchen. Denn die Performance-Verluste,
die Sie sich per se schon durch zu viele gleichzeitig geladen Forms
einhandeln, wiegen tatsächlich zig-fach schwerer...
Bei der Prüfung über die Forms-Sammlung sollten Sie allerdings
eines bedenken: Das betreffende Form befindet sich sofort nach dem
expliziten Laden bzw. dem ersten Zugriff in der Forms-Sammlung. Es
ist also bereits beim Eintritt in die Form_Load-Ereignisprozedur
darin enthalten. Umgekehrt wird es erst nach Abschluss der
Bearbeitung des Unload-Ereignisses aus der Forms-Sammlung entfernt.
Wenn Sie jedoch statt dessen wissen wollen, ob ein Form geladen
UND das Load-Ereignis abgearbeitet ist, das Form als tatsächlich
vollständig samt allen darauf befindlichen Steuerelementen
vollständig geladen ist, ist die Prüfung der Forms-Sammlung nicht
sonderlich sinnvoll. Deklarieren Sie in diesem Fall eine Form-weit
gültige private Variable des Datentyps Boolean (zum Beispiel
pLoaded genannt) und ermöglichen Sie den Zugriff darauf über die
selbstdefinierte Eigenschaft "Loaded". Diese Variable
setzen Sie als letztes in der Form_Load-Ereignisprozedur gleich True.
Umgekehrt setzen Sie diese Variable als letztes in der
Form_Unload-Ereignisprozedur wieder auf False - allerdings nur dann,
falls Sie dort nicht zuvor den Cancel-Parameter auf True gesetzt
haben sollten und das Form somit tatsächlich entladen wird.
Private pLoaded As Boolean
Public Property Get Loaded() As Boolean
Loaded = pLoaded
End Property
Private Sub Form_Load()
' Diverser Code in dieser Ereignisprozedur
pLoaded = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Diverser Code in dieser Ereignisprozedur
pLoaded = False
End Sub
 |
Über die selbstdefinierte Eigenschaft
Loaded kann das Form darüber informieren ob es samt allen
darauf platzierten Steuerelementen vollständig geladen bzw.
entladen ist

|

|