【问题标题】:Using array to change ToggleButton visibility on/off (AS3/Flex)使用数组更改 ToggleButton 可见性开/关 (AS3/Flex)
【发布时间】:2015-10-14 19:43:56
【问题描述】:

所以我试图能够改变我现在拥有的一系列切换按钮的可见性。使用 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],它也会给我 null....不知道在这里做什么。

这里是新手编码器,请多多指教!

【问题讨论】:

  • 你有什么样的错误?还跟踪 numericstepper_changeHandler 中的 array 和 array.length。你确定它在处理程序执行之前已经初始化了吗?

标签: arrays actionscript-3 apache-flex


【解决方案1】:

好的,我可能知道问题出在哪里:您正在组件中创建数组变量,但当时(在构建组件时)按钮尚未初始化(即== 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>

【讨论】:

    【解决方案2】:

    确实是新手错误。您需要了解变量和对象之间的区别。 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2021-03-12
      • 2014-05-11
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多