2011-08-08 89 views

回答

2

試試這個:

for (var i:int = systemManager.popUpChildren.numChildren - 1; i >= 0; i--) 
{ 
    var popup:IFlexDisplayObject = IFlexDisplayObject(systemManager.popUpChildren.getChildAt(i)); 
    PopUpManager.removePopUp(popup); 
} 
+1

@Constantiner嗨,我得到'systemManager.popUpChildren.numChildren價值爲零。所以循環沒有被執行。 –

+0

對不起,錯過了關於打開窗口的觀點。所以你需要先打開所有的窗口。 – Constantiner

+1

Hi @ Constantiner,雖然他們被打開,但是孩子的數量卻顯示爲零。 –

4

試試這個:

package com.devahead.utils 
{ 
    import flash.display.DisplayObject; 

    import mx.collections.ArrayCollection; 
    import mx.core.Application; 
    //import mx.core.FlexGlobals; // NOTE: use this import for Flex 4.x and higher 
    import mx.core.IChildList; 
    import mx.core.UIComponent; 
    import mx.managers.PopUpManager; 

    public class PopUpUtils 
    { 
     /** 
     * Returns all the popups inside an application. Only the popups whose base 
     * class is UIComponent are returned. 
     * 
     * @param applicationInstance 
     * Application instance. If null, Application.application is used. 
     * @param onlyVisible 
     * If true, considers only the visible popups. 
     * @return All the popups in the specified application. 
     */ 
     public static function getAllPopups(applicationInstance: Object = null, 
      onlyVisible: Boolean = false): ArrayCollection 
     { 
      var result: ArrayCollection = new ArrayCollection(); 

      if (applicationInstance == null) 
      { 
       // NOTE: use this line for Flex 4.x and higher 
       //applicationInstance = FlexGlobals.topLevelApplication; 

       // NOTE: use this line for Flex 3.x and lower 
       applicationInstance = Application.application; 
      } 

      var rawChildren: IChildList = applicationInstance.systemManager.rawChildren; 

      for (var i: int = 0; i < rawChildren.numChildren; i++) 
      { 
       var currRawChild: DisplayObject = rawChildren.getChildAt(i); 

       if ((currRawChild is UIComponent) && UIComponent(currRawChild).isPopUp) 
       { 
        if (!onlyVisible || UIComponent(currRawChild).visible) 
        { 
         result.addItem(currRawChild); 
        } 
       } 
      } 

      return result; 
     } 

     /** 
     * Checks if an application has visible popups. Only the popups whose base 
     * class is UIComponent are considered. 
     * 
     * @param applicationInstance 
     * Application instance. If null, Application.application is used. 
     * @return True if there are visible popups in the specified application, 
     *   false otherwise. 
     */ 
     public static function hasVisiblePopups(applicationInstance: Object = null): Boolean 
     { 
      if (applicationInstance == null) 
      { 
       // NOTE: use this line for Flex 4.x and higher 
       //applicationInstance = FlexGlobals.topLevelApplication; 

       // NOTE: use this line for Flex 3.x and lower 
       applicationInstance = Application.application; 
      } 

      var rawChildren: IChildList = applicationInstance.systemManager.rawChildren; 

      for (var i: int = 0; i < rawChildren.numChildren; i++) 
      { 
       var currRawChild: DisplayObject = rawChildren.getChildAt(i); 

       if ((currRawChild is UIComponent) && UIComponent(currRawChild).isPopUp 
        && UIComponent(currRawChild).visible) 
       { 
        return true; 
       } 
      } 

      return false; 
     } 

     /** 
     * Closes all the popups belonging to an application. Only the popups 
     * whose base class is UIComponent are considered. 
     * 
     * @param applicationInstance 
     * Application instance. If null, Application.application is used. 
     * @return The list of the closed popups. 
     */ 
     public static function closeAllPopups(applicationInstance: Object = null): ArrayCollection 
     { 
      var allPopups: ArrayCollection = getAllPopups(applicationInstance); 

      for each (var currPopup: UIComponent in allPopups) 
      { 
       PopUpManager.removePopUp(currPopup); 
      } 

      return allPopups; 
     } 
    } 
} 

我是從以下幾點: http://www.devahead.com/blog/2009/12/getting-all-the-popups-in-a-flex-application/