2009-12-05 20 views
0
package com.test{ 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import com.greensock.*; 
    import com.greensock.easing.*; 
    import com.test.CreateRoundRectButton; 
    import flash.events.*; 
    import flash.net.*; 

    public class DetailView extends MovieClip { 
     private var detailPanel:MovieClip=new MovieClip(); 
     private var detailData:Object; 
     private var closeBtn:Sprite; 
     private var DetailForm:DetailViewForm=new DetailViewForm(); 

     public function DetailView() { 

      createPanel(); 
      addChild(detailPanel) 
      detailPanel.addChild(DetailForm); 
     } 
     private function createPanel() 
     { 

      closeBtn=new CreateRoundRectButton(30,30,10,1,0xFFFFFF,"X",0x000000); 
      closeBtn.x=DetailForm.width - 25; 
      closeBtn.y=2; 
      closeBtn.addEventListener(MouseEvent.MOUSE_UP, closePanel,false,0,true); 
      DetailForm.addChild(closeBtn) 
     } 

     public function closePanel(evt:MouseEvent) { 
      removeChild(evt.currentTarget) 
     } 
    } 
} 

如何刪除此類的子項。當我按下關閉按鈕時,它需要刪除窗口。但我沒有正確地得到這個事件。我如何刪除這個。如何在Flash AS3中獲取關閉或刪除實例的事件

回答

3

您似乎對Event.currentTarget意味着什麼存在誤解(或者它只是一個編碼錯誤)。當closePanel作爲closeBtn上的鼠標上移的結果時,evt.currentTarget的值爲closeBtn(因爲它是添加偵聽器的對象,它是處理事件的對象)。由於closeBtn不是DetailView的孩子,所以你不會看到任何事情發生。事實上,如果您要在調試播放器中運行代碼的調試版本,您將看到removeChild調用會導致異常。

假設你要刪除的detailPanel那麼你可以簡單地忽略currentTarget當前和刪除你已經知道你要刪除:

public function closePanel(evt:MouseEvent) { 
    removeChild(detailPanel); 
} 

或者......既然MOUSE_UP氣泡可以添加監聽器到detailPanel並且evt.currentTarget將是detailPanel,因此removeChild調用將起作用:

detailPanel.addEventListener(MouseEvent.MOUSE_UP, closePanel, false, 0, true); 
相關問題