2012-11-21 8 views
1
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를 선택한다고 가정 해 봅시다. 텍스트 상자에 'He 's in place'와 같은 말을하고 싶습니다.콤보 상자에서 값을 가져 오는 방법은 무엇입니까?

답변

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

은, 당신도 정렬하기 전에 배열의 복사본을 만들 필요가 없습니다.

+0

고마워.하지만 지금 내 이름이 콤보 상자에 두 번 나열 되었기 때문에 내 코드의 일부를 바꿀 수 있습니다. 또한 그것은 텍스트 필드에서 sys의 '순위'를 지정합니다. –

+0

생성 및 이벤트 리스너 부분을 대체하기로되어있었습니다. 방금 코드를보다 자세히 보여주기 위해 업데이트했습니다. 현재 IDE가 없기 때문에 약간의 구문 오류가있을 수 있지만 이것이 일반적인 방향입니다. – BoppreH

+0

감사합니다. 매력처럼 작동합니다! –

관련 문제