我已将Label和ComboBox放在符号中,如下面的代码所示。
public class LabelCombo extends MovieClip {
//myLabel is an instance of fl.controls.Label
//myCombo is an instance of fl.controls.ComboBox
public function LabelCombo() {
}
public function setLabelText(s:String):void{
myLabel.text = s;
}
public function getLabelText():String{
return myLabel.text;
}
public function removeAllItems():void{
if(myCombo.dataProvider.length > 0)
myCombo.removeAll();
}
public function setSingleItem(o:Object):void{
removeAllItems();
myCombo.addItem(o);
}
public function setList(itemList:Array):void{
for(var i:int = 0; i < itemList.length; i++){
if(i==0)
setSingleItem(itemList[i]);
else
addSingleItem(itemList[i]);
}
}
public function addSingleItem(o:Object):void{
for(var i:int = 0; i < myCombo.dataProvider.length; i++){
if(o == myCombo.getItemAt(i))
return;
}
myCombo.addItem(o);
}
public function addList(itemList:Array):void{
for(var i:int = 0; i < itemList.length; i++){
addSingleItem(itemList[i]);
}
}
public function getSelectedItem():Object{
return myCombo.selectedItem;
}
public function getItemByLabel(s:String):Object{
return Object(myCombo.getChildByName(s));
}
public function selectItemAt(index:int):void{
myCombo.selectedIndex = index;
}
public function getselectedIndex():int{
return myCombo.selectedIndex;
}
}
现在我要addEventListener(Event.CHANGE, changeHandler)
整个符号所以我可以做那样的事情
trace(LabelCombo(event.currentTarget).getLabelText())
trace(LabelCombo(event.currentTarget).getSelectedItem().data)
我需要来自两个单一控件的信息。 如果有人能告诉我如何做到这一点真好。
提前致谢
编辑:我认识到存在一些误解: 我需要这个来通过XMLSocket进行通信。服务器必须知道两件事:1)ComboBox的名称是什么(在这种情况下,我用myLabel获取名称)2)新选择的索引 希望现在一切都更加清晰
答案 0 :(得分:1)
我真的不明白你的问题,但你可以试试这个
public class LabelCombo extends MovieClip {
//myLabel is an instance of fl.controls.Label
//myCombo is an instance of fl.controls.ComboBox
public function LabelCombo() {
myLabel.addEventlistener(Event.CHANGE,onChange);
myCombo.addEventlistener(Event.CHANGE,onChange);
}
private function onChange(e:Event):void {
dispatchEvent(new Event(Event.CHANGE));
}
}
将更改事件侦听器添加到标签和组合。使用dispatchEvent可以调度自定义事件。 你可以像这样使用
var labeCombo:LabelCombo = new LabelCombo();
addChild(labeCombo);
labeCombo.addEventlistener(Event.CHANGE,onChangeMv);
function onChangeMv(e:Event){
trace(labeCombo.getLabelText());
trace(labeCombo.getSelectedItem().data);
}
您可以使用custome事件类与事件调度程序一起发送数据。
答案 1 :(得分:0)
您只需将事件监听器设置为myCombo
,但监听器应位于LabelCombo
的代码中,这样您就不需要event.currentTarget
的技巧,只需使用{{ 1}}上下文与子项一起使用,因为侦听器只会被此对象的this
子项中的更改触发。
myCombo
答案 2 :(得分:0)
我的意思是代替这个:
trace(LabelCombo(event.currentTarget).getLabelText())
尝试这样:(如果可能的话)
LabelCombo.setLabelText("Just_A_Test");
var str_Check : String = LabelCombo.getLabelText();
trace ("returned string is : " + str_Check);
应该说returned string is : Just_A_Test
...
如果 LabelCombo 是 myCombo 的孩子,那么正确的参考路径是:myCombo.LabelCombo.getLabelText();
等等。