Vielen Dank, Christian und Thomas, für die genaue Beratung. Man wird immer schlauer (die Funktion IndexOf war bisher echt an mir vorbeigegangen). Also: Dachte ich es mir doch, dass man an die programm-eigene Enumeration der Fenster herankommt. Aber ein eigenes Array FensterArr() brauche ich wohl doch. Ich weiß sonst nicht, wie ich während des Programmlaufs per Code ein neues Fenster erzeugen kann. Christian Dorn hat ganz Recht: Als Identifier meines neuen Fensters dürfte ich natürlich nicht die Index-Position im Array nehmen, weil sich die ja bei jedem Löschvorgang verändert. Also müsste man hier eine Art unique ID verwenden, wie in einer Datenbank. Aber auch dieser Identifier ist wohl kaum nötig, denn das einzelne Fenster arbeitet ja weitgehend autonom und muss von außen eigentlich nicht angesprochen werden. Wenn das Fenster selbst etwas von außen braucht (z.B. gemeinsamer Code in einem Modul), kann man das als Funktion mit Rückgabewert erledigen.
Falls ich noch 'was übersehen habe, bitte mich zu verbessern.
besten Dank und besten Gruß, Christian Hahn.

----- Original Message ----- From: "Thomas Tempelmann" <[email protected]>
To: "Realbasic NUG German" <[email protected]>
Sent: Tuesday, July 30, 2013 9:17 AM
Subject: Re: Window1 mehrfach instanziieren


2013/7/30 Maximilian Tyrtania <[email protected]>:
Das Fenster überlebt im Speicher, weil Du eine Referenz im Array gespeichert hast und der refcount nicht 0 erreicht

Ich glaube, daß jemand aber schon schrieb, daß man die Einträge aus
dem Array entfernen soll, sobald des Fenster's Close-Event aufgerufen
wird.

Man kann es stattdessen aber auch mit WeakRefs ins Array lösen.

Also statt:
FensterArr.Append New Window1

Eher so:
dim w as New Window1
FensterArr.Append new WeakRef(w)

Beim Abfrage des Arrays würde man dann so vorgehen:

dim ref as WeakRef = FensterArr(idx)
if ref.Value = 0 then
  // Fenster wurde durch "Close" geschlossen
  FensterArr.Remove idx // aus Array entfernen
else
  dim w as Window1 = Window1(ref.Value)
  … jetzt haben wir das Fenster
 end

Oder so.
Dennoch, meine vorige Lösung ist imer noch die bessere.

--
Thomas Tempelmann, http://www.tempel.org/
Follow me on Twitter: http://twitter.com/#!/tempelorg


Antwort per Email an