0

我的主舞台上已经放置了 2 个 TLF 文本框。在属性检查器窗口中,我给这些实例名称:“txt1”和“txt2”。

我试图有一个 mouseup 事件,并找出它发生在哪个文本框上。

我的文档类有以下代码:

package  {
import flash.display.Sprite;
import flash.events.KeyboardEvent;

public class SingleEvent extends Sprite{

    public function SingleEvent() {
        // constructor code
        root.addEventListener(KeyboardEvent.KEY_UP, textChanged,false,0,true);
    }

    private function textChanged(e:KeyboardEvent){
        trace(e.target.name);
        trace("   " + e.target);
        switch(e.target){
            case txt1:
                trace("txt1 is active");
                break;
            case txt2:
                trace("txt2 is active");
                break;
            default:
                break;
        }
    }

    }
}

示例输出是:

instance15
   [object Sprite]
instance21
   [object Sprite]

由于对象已经在舞台上,我不确定如何让 flash 将它们识别为“txt1”和“txt2”而不是“instance#”。我尝试设置 .name 属性,但没有效果。

在发布设置中,我选中了“自动声明阶段实例”。

此外,是否可以为多个滑块组件设置一个更改事件?以下永远不会触发:

root.addEventListener(SliderEvent.CHANGE, sliderChanged,false,0,true);

感谢您的任何提示

4

1 回答 1

0

在调用构造函数时,Flash Player 似乎还没有初始化 TLFTextFields。尝试这个:

package  {

    import flash.display.MovieClip;
    import flash.utils.describeType;
    import flash.events.Event;

    public class TestTLF extends MovieClip {

        private function onEnterFrame (ev:Event) : void {
            removeEventListener (Event.ENTER_FRAME, onEnterFrame);
            for (var i:int = 0; i < numChildren; i++) {
                var obj:Object = getChildAt(i);
                trace (obj.name + ":"+describeType(obj));
            }
        }

        public function TestTLF() {
            addEventListener (Event.ENTER_FRAME, onEnterFrame);
        }
    }

}

您会发现除了神秘创建的附加对象“__id#”和“instance#”之外,您的两个 TFLTextField 都被识别。

此外,您的 Slider 组件显然不会“冒泡”它们的 SliderEvent,这意味着它们永远不会到达根对象。但是,您可以根据需要多次分配处理程序函数,因此您只需将侦听器添加到每个滑块,所有这些都引用相同的sliderChanged函数。

于 2010-12-29T13:48:44.517 回答