Alle Fenster schliessen

Hi,
irgendwie klappt hier was nicht
Ich will alle offene Fenster schliessen und das sollte doch so funktionieren, oder:
dim i as integer
for i=WindowCount-1 DownTo 0
if Window(i) <> nil then
window(i).Close
end
next
Aber gleich beim ersten kommt:
An exception of class OutOfBoundsException was not handled. The application must shut down.
Was passiert da? Zudem sollte das Main Window ausgeschlossen werden.
Was mach ich falsch?

Klemens

Kein Window 0 ?

Edit:
Wie viele Fenster sind offen?
(WindowCount - 1 DownTo 0)

Hi,

in Summe 3 und ich sehe gerade, dass das Main die 0 hat. Ich habe habe einige Tests gemacht und der Fehler tritt nur bei dem Fenster auf, wo im Close Event eine Referenz auf das Main ist. Alle anderen Fenster haben das nicht und da tritt der Fehler nicht auf.

Code? :slight_smile:

Was meinst Du mit “im Close Event eine Referenz auf das Main ist”?

Wenn Du Dein Main-Window nicht schlieen willst, dann mut Du das mit dem Namen ausschlieen.

Den Namen eines Fensters bekommst Du mit dieser Funktion:

[code]Public Function getWindowName(Extends theWindow as Window) as String

'returns the name of a Window

Dim theTypeInfo as Introspection.TypeInfo = Introspection.GetType(theWindow)
Return theTypeInfo.Name

exception exc
theException = new ErrorException(exc, currentMethodName)
End Function[/code]

[quote=450912:@Klemens Klarhoelter]OutOfBoundsException[/quote]:
Die Fensternummer existiert nicht.

Das klingt irgendwie so, als würde das betroffene Fenster Mainwindow (oder ein anderes) ebenfalls schließen, womit das Array in der Schleife nicht mehr gültig ist. WindowCount wird durch das Schließen des Fensters um mehr als 1 erniedrigt, was dann zur OOB-Exception führt. Das könntest du umgehen, indem du die Schleife modifizierst:

for i=WindowCount-1 DownTo 0 If i < WindowCount then Dim w as Window = Window(i) If not w isa MainWindow then // -> Zudem sollte das Main Window ausgeschlossen werden. w.close End if End if next

Aber besser wäre, die Querverbindung der Fenster zu lösen, sofern deine Programmlogik das hergibt.

In einem Window (w1), welches geschlossen werden soll, wird im im Event Handler Close auf das Main (W0) in eine Variable Daten geschrieben und das scheint ein Problem zu sein. Bei den anderen Fenstern wird im Event Handler Close nicht auf andere Fenster verwiesen und die lassen sich fehlerfrei schliessen. Ich teste morgen weiter und bau den Code mal um, damit der Event Handler Close vom Window frei von Code ist.