Am 29.07.2013 um 09:40 schrieb Christian Hahn:
Toll, besten Dank.
Ich habe es nun mit einem Array so eingerichtet, dass ich auch
während des Programm-Laufs weitere Instanzen von Window1 erzeugen
kann:
in App: FensterArr() as Window1
Sub NeuesFensterBilden
FensterArr.Append New Window1
FensterArr(UBound(FensterArr)).Title = "Fenster: " +
str(UBound(FensterArr))
FensterArr(UBound(FensterArr)).MeinePositionImArray =
UBound(FensterArr)
Wenn das Fenster geschlossen wird, kann mit der fenstereigenen
Propertie MeinePositioImArray das entsprechende Element in
FensterArr() wieder entfernt werden.
Grundsätzlich kannst Du natürlich auch ein Array verwenden. Aber die
Eigenschaft ".MeinePositionImArray" kann nicht funktionieren! Stell
Dir mal vor, Du hast ein Array mit 5 Elementen (Fenstern). Jetzt
schließt Du das zweite Fenster (.MeinePositionImArray = 1). Was
passiert dann mit den Fenstern 3-5?
Deren Eigenschaft "MeinePositionImArray" zeigt dann plötzlich auf ein
falsches Element im Array! Denn Du hast das ehemalige Element "1"
entfernt, die Werte in den "nachfolgenden" Fenstern aber nicht
angepasst. Schließt Du jetzt das ehemals dritte Fenster, wird das
ehemals vierte Fenster aus dem Array entfernt. Im schlimmsten Fall
kannst Du sogar eine OutOfBoundsException erhalten, wenn
"MeinePositionImArray" auf ein nicht mehr existierendes Element
verweist! Besser wäre hier eine eigene Methode um ein Fenster aus dem
Array zu entfernen.
Sub EntferneFenster( w as Window1 )
dim index as Integer = FensterArr.IndexOf( w )
if index > -1 then
FensterArr.remove( index )
end if
End Sub
Diese Methode rufst Du dann im Close Event von Window1 folgendermaßen
auf: EntferneFenster( self ).
Die Array Funktion "IndexOf" liefert den Index des angegebenen Objekts/
Wertes in einem Array. Ist das Objekt/der Wert nicht im Array
enthalten, liefert die Funktion "-1". So kannst Du Dir die ganze
Eigenschaft "MeinePositionImArray" sparen.
Gruß,
Christian