2009-11-21 2 views
2

내 응용 프로그램에 콤보 상자가 있습니다. 또한 "상태"라는 변수가 있습니다. 상태 변수의 값이 5 또는 6 일 때만 콤보 상자가 활성화되기를 원합니다. 그렇지 않으면 콤보 상자의 값을 변경할 수 없어야합니다. 이전 값만 가져야합니다.특정 조건에서 콤보 상자의 드롭 다운 기능을 비활성화하는 방법은 무엇입니까?

콤보 상자를 사용하지 않으려면 click 이벤트를 작성했습니다. 그러나 콤보 상자가 비활성화되어 있어도 콤보 상자의 드롭 다운 목록이 표시되고 드롭 다운에서 값을 선택하면 변경됩니다. 그 후에 만 ​​비활성화됩니다 ..

방법 이것을 피하시오? 드롭 다운 기능 자체가 비활성화되기를 원합니다. 이것은 내가 작성한 코드입니다. 누군가 나를 인도 하네.

<mx:FormItem label="Review Status:" width="100%" horizontalAlign="right"> 
    <mx:HBox> 
    <mx:Label width="30"/> 
     <mx:ComboBox id="reviewStatus" dataProvider="{Status}" 
        width="150" click="onStatusChange(event)"/> 
    </mx:HBox> 

액션 스크립트 부분 : 나는 또한 변경 이벤트를 사용하는 경우

private function onStatusChange(event:Event):void 
{ 
    var i:int; 
    for(i=0;i<defectDetails.length;i++) 
    { 
    var defStatusId:String=defectDetails.getItemAt(i).DefectStatusId; 
    if(defStatusId=="5"){ 
       reviewStatus.enabled=true; 
    } 
    else if(defStatusId=="6"){ 
       reviewStatus.enabled=true; 
    } 
    else{ 
       reviewStatus.enabled=false; 
      //reviewStatus.selectedItem.label="Review"; 
      reviewStatus.toolTip="Status can be changed only if Defect Status is Verified or Deferred."; 

       //Alert.show("Status can be changed only if defect status is verified or deferred"); 
    } 
    } 
    } 

, 처음으로 값이 변경된다. 그 후에 만 ​​콤보 상자가 비활성화됩니다. 상태 값이 5 또는 6이 아닌 경우 동일한 값을 유지하고 콤보 상자를 비활성화하는 방법은 무엇입니까?

답변

0

false로 설정하기 전에 reviewStatus.close()으로 전화하십시오.

왜 ComboBox의 click 이벤트에서이 작업을 수행하고 있습니까? defectDetails (또는 해당 dataProvider로 defectDetails을 사용하는 컨트롤)의 변경 이벤트에서 수행하는 것이 좋습니다.

Btw, 거기에 또 다른 잠재적 인 버그가 있습니다 : 당신은 루프에 enabled 값을 설정하고 그것을 설정 한 후 루프를 깰 수 없습니다. reviewStatus.enabled의 최종 값은 마지막 항목 인 defectDetails.getItemAt(defectDetails.length - 1)에만 달려 있습니다.

또한 enabled이 true 일 때 툴팁을 다시 정상으로 설정하지 않습니다.

0

왜 루프입니까? 당신은 단지 응 비활성화되었습니다 일단

reviewStatus.enabled = ((reviewStatus.selectedItem as Int)) == 5 || (reviewStatus.selectedItem as Int) == 6) ? false : true; 

비록, 당신은 아마 더 이상 StatusChange 이벤트를 수신하지 못합니다 즉 : 상태 변화에 지능과의 selectedItem을 잡아 수 있을까요?

0

아마도 'reviewStatus'에 'enabled'의 바인딩 기능을 사용할 수 있습니다. 마찬가지로

<mx:ComboBox id="reviewStatus" enabled = {checkEnabledForReviewStatus(defectStatusId)} /> 

그리고 스크립트 부분에

,

private function checkEnabledForReviewStatus(defectStatusId:String):Boolean 
{ 
    return (defectStatusId == "5" || defectStatusId == "6") ? true: false; 
} 
관련 문제