Alle Fenster schliessen

  1. 3 months ago

    Klemens K

    Aug 18 Pre-Release Testers, Xojo Pro

    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

  2. Emile S

    Aug 18 Europe (France, Strasbourg)
    Edited 3 months ago

    Kein Window 0 ?

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

  3. Klemens K

    Aug 18 Pre-Release Testers, Xojo Pro

    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.

  4. Sascha S

    Aug 18 Pre-Release Testers, Xojo Pro Germany, Lower Saxony

    @KlemensKlarhoelter wo im Close Event eine Referenz auf das Main ist

    Code? :)

  5. Beatrix W

    Aug 18 Pre-Release Testers, Third Party Store Europe (Germany)

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

    Wenn Du Dein Main-Window nicht schließen willst, dann mußt Du das mit dem Namen ausschließen.

  6. Beatrix W

    Aug 18 Pre-Release Testers, Third Party Store Europe (Germany)

    Den Namen eines Fensters bekommst Du mit dieser Funktion:

    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
  7. Emile S

    Aug 18 Europe (France, Strasbourg)
    Edited 3 months ago

    @Klemens Klarhoelter OutOfBoundsException

    :
    Die Fensternummer existiert nicht.

  8. Ulrich B

    Aug 18 Pre-Release Testers, Xojo Pro Europe (Germany, Berlin) · xo...

    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.

  9. Klemens K

    Aug 18 Pre-Release Testers, Xojo Pro

    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.

or Sign Up to reply!