如何从组合框中获取值?

时间:2012-11-21 19:53:15

标签: actionscript-3 combobox

import fl.events.*;  

const PointsStart:int=0;  

var Points:int=PointsStart;  

youChose.text=String(Points)+" points";  

comboBox.prompt='Contestants'  
comboBox.addItem({label:"John Smith",Points:10});  
comboBox.addItem({label:"Chris Tucker",Points:12});  
comboBox.addItem({label:"Paul Allen",Points:14});  

comboBox.addEventListener(Event.CHANGE, listevalg);  


function listevalg (evt:Event)  
{  
    Points=comboBox.selectedItem.Points;  
    youChose.text=String(Value)+" points";  
}  

我想要一个文本框,说明目前的排名是什么。假设我在组合框中选择了Chris Tucker,我希望文本框能说出“他在第二位”的内容

1 个答案:

答案 0 :(得分:1)

首先,您需要知道每个人所处的等级。为此,您可以复制人员列表并按点排序,然后将他们的等级注册为该列表中的位置。

import fl.events.*;  

const PointsStart:int=0;  

var Points:int=PointsStart;  

youChose.text=String(Points)+" points";  

comboBox.prompt='Contestants'  

var people:Array = [{label:"John Smith",Points:10},
                    {label:"Chris Tucker",Points:12},
                    {label:"Paul Allen",Points:14}];

// Copy of "people", sorted by Points, descending.
var sortedPeople:Array = people.concat().sortOn("Points", Array.DESCENDING | Array.NUMERIC);

for each (var person:Object in people) {
    // Register this person's ranking as its position in the sorted array + 1
    // (because indexes start at 0)
    person.Rank = sortedPeople.indexOf(person) + 1;
    comboBox.addItem(person);
}

comboBox.addEventListener(Event.CHANGE, listevalg);  


function listevalg (evt:Event)  
{  
    Points=comboBox.selectedItem.Points;
    // The ranking is now available as "item.Rank".
    youChose.text=String(Points)+" points, rank "+String(comboBox.selectedItem.Rank);
}

如果您实际上不需要在组合框中保留当前顺序,则在排序之前甚至不需要复制该数组。