2

我的目标是从另一个处于另一种状态的组件中更改组件的可见性。我一直在阅读有关该事件的信息,但我可以灵活地工作,我明白了TypeError: Error # 1009: Can not access a property or method of a null object reference

<<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.events.FlexEvent;


        protected function buttonChange_clickHandler(event:MouseEvent):void
        {
            Tab.selectedIndex=1;    
            border.visible=true;
            border.setStyle("backgroundColor",'#8000FF');

        }



    ]]>
</fx:Script>
<mx:TabNavigator x="197.7" y="147.35" width="514" id="Tab" height="335">
    <s:NavigatorContent label="State 1" width="100%" height="100%">

        <s:Button x="65" y="103" id="buttonChange" label="Change state" click="buttonChange_clickHandler(event)" />

    </s:NavigatorContent>
    <s:NavigatorContent label="State2" id="state2"  width="100%" height="100%">
        <s:BorderContainer x="191"  y="37" width="249" height="223" visible="false"  cornerRadius="20" borderWeight="5" id="border">
        </s:BorderContainer>
    </s:NavigatorContent>
</mx:TabNavigator>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

4

1 回答 1

0

发生错误是因为当Tab Navigator更改索引时,您的边界符号不是“创建”的。有两种快速的方法可以解决这个问题:

1) 使用 callLater 确保tab改变时会创建边框:

        protected function buttonChange_clickHandler(event:MouseEvent):void
        {
            Tab.selectedIndex=1;
            callLater(turnVisible);
        }

        private function turnVisible():void{
                border.visible=true;
                border.setStyle("backgroundColor",'#8000FF');
        }

2)或将creationPolicy设置为第二个的“全部” </s:NavigatorContent>。这样会增加应用程序的启动时间:

<s:NavigatorContent label="State2" id="state2"  width="100%" height="100%" creationPolicy="all">
于 2012-12-13T19:21:12.347 回答