上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。




ViewStackを使用して子コントロール(複数のキャンバス等)を切り替えることが
あると思います。
その時ViewStackの設定がデフォルトのままだと、一度も表示していない子コントロールに
アクセスしようとすると「対象コントロールはNullオブジェクト」というエラーが出力されます。
(一度でも表示していればインスタンス化される為、エラーとはなりません。)

これを回避するためにはcreationPolicyプロパティを使用します。
サンプルを用いて使用方法とその効果を記載していきます。



Main.mxml




<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>
<![CDATA[

private function onPolicyDefaultLabelChangeClick():void{
txtPolicyAutoLabel.text = "Buttonクリックされました。";
}

private function onPolicyAllLabelChangeClick():void{
txtPolicyAllLabel.text = "Buttonクリックされました。";
}
]]>
</mx:Script>
<mx:VBox>
<mx:TitleWindow title="creationPolicy設定なし(auto)">

<mx:Label text="Canvas2Autoの文字列変更" />
<mx:Button label="変更" click="{onPolicyDefaultLabelChangeClick()}"/>
<mx:Label text="※ Canvas2Autoに切り替える前に「変更」ボタンを押してください。" color="#ff0000" />

<mx:LinkBar dataProvider="{viewStackPolicyDefault}" />

<mx:ViewStack id="viewStackPolicyDefault">
<mx:Canvas label="Canvas1Auto" width="300" height="100"
borderStyle="solid" backgroundColor="#FBC1C1">
<mx:Text text="ViewStack1のキャンバスです。" />
</mx:Canvas>
<mx:Canvas label="Canvas2Auto" width="300" height="100"
borderStyle="solid" backgroundColor="#FFFE9C">
<mx:Text id="txtPolicyAutoLabel" text="ViewStack2のキャンバスです。" />
</mx:Canvas>
</mx:ViewStack>

</mx:TitleWindow>

<mx:TitleWindow title="creationPolicy設定あり(all)">

<mx:Label text="Canvas2Allのラベル文字列変更" />
<mx:Button label="変更" click="{onPolicyAllLabelChangeClick()}"/>
<mx:Label text="※ Canvas2Allに切り替える前に「変更」ボタンを押してください。" color="#ff0000" />

<mx:LinkBar dataProvider="{viewStackPolicyAll}" />

<mx:ViewStack id="viewStackPolicyAll" creationPolicy="all">
<mx:Canvas label="Canvas1All" width="300" height="100"
borderStyle="solid" backgroundColor="#FBC1C1">
<mx:Text text="ViewStack1のキャンバスです。" />
</mx:Canvas>
<mx:Canvas label="Canvas2All" width="300" height="100"
borderStyle="solid" backgroundColor="#FFFE9C">
<mx:Text id="txtPolicyAllLabel" text="ViewStack2のキャンバスです。" />
</mx:Canvas>
</mx:ViewStack>

</mx:TitleWindow>
</mx:VBox>

</mx:Application>


creationPolicy設定なし(auto)では、「Canvas2Auto」に切り替える前に
「変更」ボタンを押すとFlashPlayerからNULLオブジェクト参照のエラーが表示されます。

creationPolicyプロパティ「auto」


初めて表示した時にコントロールがインスタンス化されます。
その為、一度も表示していない場合はコントロールがインスタンス化される前となり
該当コントロールにアクセスするとNULLオブジェクト参照となってしまいます。
(一度表示したあとはインスタンス化されている為、アクセス可能)

creationPolicyプロパティ「all」


ViewStackを表示した際に全ての子コントロールがインスタンス化される為、
一度も表示していない場合でも該当コントロールにアクセスすることができます。


実行結果は以下のようになります


少しでも参考になれば応援お願いします。












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。