2015-10-14 33 views
0

所以我試圖改變我現在擁有的togglebutton數組的可見性。使用彈性界面工具,我製作了10個切換按鈕,並將其調用者ID命名爲b1,b2,b3 ...等。然後我將這些ID放入我提到的數組中。我也有一個數字步進器,我將被調用的ID改爲了numericstepper。使用數組更改ToggleButton可見性開/關(AS3/Flex)

var buttonArray: Array= new Array (b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)//global ; 

protected function numericstepper_changeHandler(event:Event):void { 
var x:int=0 
var y:int 
x=numericstepper.value //the value of the numericstepper 
for (y=0; y<x; y++) { 
buttonArray[y].visible= false // trying to change the visibility of each   button in the array 
} 

但這不起作用,並給我一個錯誤。其實,即使當我只是跟蹤buttonArray [1]它給了我空... ....不知道該怎麼做。

新手編碼器在這裏,所以請指教!

+0

你有什麼樣的錯誤?還可以在numericstepper_changeHandler中跟蹤數組和數組長度。你確定在處理程序執行之前它已經被初始化了嗎? – leetwinski

回答

0

好的我可能知道問題是什麼:你在一個組件中創建數組變量,但是在那個時候(在構建組件時)那些按鈕還沒有初始化(即== null)。通常的做法是在使用內部組件之前等待組件的一些生命週期事件。通常這是creationComplete事件。

是這樣的:

<?xml version="1.0"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
     creationComplete="onCreationComplete()"> 
    <fx:Script><![CDATA[ 
     private var buttonArray:Array; 

     private function onCreationComplete():void { 
      buttonArray = [b1, b2, b3, b4, b5, b6, b7, b8, b9, b10]; 
     } 

     protected function numericstepper_changeHandler(event:Event):void { 
      const x:int = numericstepper.value; 
      for (var i:int = 0; i < x; i++) { 
       buttonArray[i].visible = false; 
      } 
     } 
     ]]></fx:Script> 
     <!-- inner components here --> 
</s:Application> 
0

這確實是一個新手的錯誤。您需要了解變量和對象之間的差異。 b1是一個變量,一個ToggleButton是一個對象,一個變量持有對象的引用,但不是對象本身,它只是一個引用。所以在你的情況下,你正確地將你的變量添加到一個數組中,但在這一點上,這些變量不會引用任何對象,所以在這種情況下,它們的默認值(它們真正引用的內容)是「null」。 null是一種特殊類型的對象,它沒有方法,也沒有屬性,可以用來代替任何複雜的對象。

當您將這些變量b1,b2等添加到數組中時,您確實會添加它們所引用的內容,因此不要將變量本身添加到數組中,因此無論數組中的變量引用如何,在您的情況下它都是'null 」。

爲了確保您添加切換按鈕對象,可以簡單地推遲一切,檢查例如值:

var buttonArray: Array; 

protected function numericstepper_changeHandler(event:Event):void 
{ 
    if(!buttonArray && b1)//b1 is not null so time to fill the array 
    { 
     buttonArray = [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10]; 
    } 
    else if(!b1) 
    { 
     return;//still no b1 so exit. 
    } 
    const x:int = numericstepper.value; 
    for (var i:int = 0; i < x; i++) 
    { 
     buttonArray[i].visible = false; 
    } 
}