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)
        }
    }
}

我怎样才能删除这个班级的孩子。当我按下关闭按钮时,它需要移除窗口。但是我没有正确地得到这个事件。我怎样才能删除这个。

4

1 回答 1

3

您似乎对 Event.currentTarget 的含义有误解(或者它只是一个编码错误)。当鼠标移到 closeBtn 上调用 closePanel 时,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);
于 2009-12-05T06:21:09.177 回答