2009-11-21 44 views
2

我在我的應用程序中有一個組合框。我也有一個名爲「狀態」的變量。我希望僅當Status變量的值爲5或6時啓用組合框。否則,我不應該能夠更改組合框中的值。它應該只有以前的值..如何在某些情況下禁用組合框的下拉功能?

我寫了一個單擊事件來禁用組合框。但即使組合框被禁用,我也會看到組合框的下拉列表,如果我在下拉列表中選擇了其他值,它就會改變..只有在它被禁用後。

如何避免這一點?我希望禁用下拉功能本身。 這是我寫的代碼。有人指導我。

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

如果我使用Change事件也首次值被改變。只有在此之後,組合框才被禁用。當狀態不是5或6時,如何保留相同的值並禁用組合框?

回答

0

在啓用設置爲false之前調用reviewStatus.close()

你爲什麼要在ComboBox的click事件上做?更好地在defectDetails(或使用defectDetails作爲其dataProvider的控件)的更改事件上執行此操作。

順便說一句,那裏有另一個潛在的錯誤:你設置enabled值在一個循環,並沒有打破設置後的循環。 reviewStatus.enabled的最終值將完全取決於最後一項 - defectDetails.getItemAt(defectDetails.length - 1)

另外,當enabled爲真時,您沒有將工具提示設置恢復正​​常。

0

爲什麼是循環?你能不能抓上的狀態更改selectedItem屬性爲INT,即:

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

一度已被停用,你可能不會被recieving更多StatusChange事件,對吧?

0

也許,您可以在'enabled'上爲'reviewStatus'使用綁定功能。像,

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

而在腳本部分,

private function checkEnabledForReviewStatus(defectStatusId:String):Boolean 
{ 
    return (defectStatusId == "5" || defectStatusId == "6") ? true: false; 
} 
相關問題