使用数组打开/关闭ToggleButton可见性(AS3 / Flex)

时间:2015-10-14 19:43:57

标签: arrays actionscript-3 flex

所以我试图能够改变我现在拥有的togglebutton数组的可见性。使用flex界面工具,我制作了10个切换按钮,并将其来电者ID命名为b1,b2,b3等。然后我将这些ID放入我提到的数组中。我还有一个数字步进器,我将被叫ID改为numericstepper。

 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],它也会让我无效....不知道该怎么做。

新手编码器在这里所​​以请指教!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

这确实是一个新手错误。您需要了解变量和对象之间的区别。 b1是一个变量,一个ToggleButton是一个对象,一个变量保存对象的引用但不是对象本身,它只是一个引用。因此,在您的情况下,您正确地将您的变量添加到数组,但此时这些变量不引用任何对象,因此在这种情况下,它们的默认值(它们真正引用的)是“null”。 null是一种特殊类型的对象,它没有方法也没有属性,可以用来代替任何复杂的对象。

当你将这些变量b1,b2等添加到数组中时,你真正添加了它们引用的内容,你不要将变量本身添加到数组中,这样无论变量引用在数组中得到什么,所以在你的情况下它是'null'

要确保添加ToggleButton对象,您可以简单地延迟所有内容并检查值,例如:

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