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




Antwort per Email an