Frage

In Flex Air App, wie öffnen Sie ein Fenster hinter einem aktiven?

Ich habe versucht und ich kann es nicht scheinen, es zur Arbeit zu bringen

generasacodicetagpre.

Mit diesem Code würde ich erwarten, dass Window1 hinter dem Haupt-App-Fenster öffnet und in 3 Sekunden Windows2 hinter Window1 öffnete.Wenn Sie dies jedoch ausführen, öffnet sich Windows1 oben im Hauptfenster und Window2 öffnet sich oben auf dem Fenster1 und der Haupt-App wird den Fokus behalten.Dies scheint ein Fehler im Flex zu sein.Wenn ja, gibt es für dieses Problem eine Problemumgehung?

Keine korrekte Lösung

Andere Tipps

Es scheint also, als ob es keinen guten Weg ist, dieses Problem zu lösen. Eine Problemumgehung wäre, Ereignislistener für Airevent.Window_Complete hinzuzufügen, und verschieben Sie das Fenster in der Ereignishandler. Dies scheint wie "richtige" Problemumgehung zu sein, und es funktioniert für einen einfachen Fall wie mein ursprüngliches Beispiel. Das Problem ist, dass dieser Ansatz nicht auf meinem Code funktionierte.

Wenn Sie sich auf den spark.components.window-Code aus dem SDK ansehen, werden Sie feststellen, dass ein Ereignislistener für Event.Enter_Frame beim Öffnen des Fensters hinzugefügt wird (in CommitProperties ()). Dann in der Ereignis-Handler, EnterFrameHandler (), hält es einen Zähler und auf dem zweiten Frame, dem Dispatch airevent.window_complete-Ereignis. Dies macht mich der Meinung, dass Airevent.Window_Complete-Ereignis unabhängig vom Status des Fensters den zweiten Rahmen feuern wird, obwohl der LiveOc sagt:

versendet, wenn das Fenster sein anfängliches Layout abschließt und das zugrunde liegende NativeWindow öffnet.

Ich vermute, mein Fenster wurde nicht voll von dem zweiten Rahmen erstellt und daher bestellt, dass bestellinbackt.


Also hier ist meine Problemumgehung:

Erstes, in meinem Fenster, überschüttete ich Open (OpenWindowActive). Wenn OpenWindowactive FALSE ist, füge ich einen Ereignislistener für Event.enter_Frame hinzu. Im Ereignis-Handler behalte ich einen Zähler und wenn die Frame-Zählung eine bestimmte Anzahl (jetzt 10) erreicht, bewege ich das aktuelle Fenster hinter dem aktiven. Dies ist ein sehr hackiger Weg, um dieses Problem umzugehen. Ich habe das Limit erhöht, und jetzt gelingt es etwa 90% der Zeit. Ich könnte das Limit weiter erhöhen, bis ich fast 100% komme, aber ich hasse es, diesen Zustand jedes Mal überprüfen zu müssen, wenn ich Änderungen am Fenster vorlege. Auch dieser Zustand könnte je nach Maschine anders sein.

Ich würde es lieben, wenn jemand mir sagen kann, wie falsch meine Problemumgehung ist, und sagen Sie mir einen viel besseren Weg, um mein Problem zu lösen ... aber bis dahin wird dies tun ...

Gibt es einen bestimmten Grund, warum Sie den Parameter useweakReference auf true setzen? Andernfalls sollten Sie einfach anrufen:

generasacodicetagpre.

Es gibt jedoch einen Fehler in dieser Codezeile. Das Timer_Complete-Ereignis wird abgefeuert, wenn der Timer alle Zyklen abgeschlossen ist. Sie haben Ihren Timer festgelegt, um unendlich "Fire" zu feuern. Es wird also nie die Zyklen abschließen.

Sie müssen diese Codezeile anschließend ändern, und Sie sollten Ihre erwarteten Ergebnisse erhalten:

generasacodicetagpre.



Kummer Um Ihre zweite Frage zu beantworten (warum Window1 nicht hinter der Anwendung angezeigt wird). Beurteilung durch den Rückgabewert der Bestellungsfunktion:

generasacodicetagpre.

Es scheint, dass die Bestellung fehlschlägt, wenn das Fenster unsichtbar ist. Es kann der Fall sein, dass Sie, indem Sie mit dem Code in dem CreationComplete-Handler diese Funktion anrufen, bevor das Anwendungsfenster die Chance hat, sich selbst anzuzeigen. Versuchen Sie, diesen Code innerhalb Ihrer OpenWindow2-Funktion zu verschieben. Yilding:

generasacodicetagpre.

Ich hoffe, das hilft irgendwie,

  • gmaale

edit: pro meinem letzten kommentieren versuchen Sie das,

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top