我的主舞台上已放置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);
感谢您提供任何提示
答案 0 :(得分: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组件显然不会“冒泡”他们的SliderEvents,这意味着他们永远不会到达根对象。但是,您可以根据需要多次分配处理函数,因此您只需向每个滑块添加侦听器,所有滑块都指向相同的sliderChanged
函数。