お世話になっております。
下記の様な機能を実装しようとしています。
ドキュメントルート
btnAdd:ボタンインスタンス
ドキュメントルートクラスTestDocument.as
package{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.SimpleButton;
public class TestDocument extends MovieClip{
public function TestDocument(){
btnAdd.addEventListener(MouseEvent.MOUSE_DOWN, onAdd);
}
private function onAdd(e:MouseEvent):void{
var test:Test = new Test();
test.x = test.y = 50;
addEventListener( Test.CLOSE, function actionA( e:Event ):void{
removeEventListener( Test.CLOSE, actionA);
removeChild( test );
});
addEventListener( Test.OK, function actionB( e:Event ):void{
removeEventListener( Test.OK, actionB);
removeChild( test );
})
addChild( test );
}
}
}
アタッチ用子オブジェクトTest
btnOk:ボタンインスタンス
btnCancel:ボタンインスタンス
Test用クラス Test.as
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.SimpleButton;
public class Test extends MovieClip{
public static const CLOSE:String = 'templateWindowClose';
public static const OK:String = 'templateWindowCorrect';
private function onOk( e:MouseEvent ):void{
dispatchEvent( new Event( OK, true ) );
}
private function onDelete( e:MouseEvent ):void{
dispatchEvent( new Event( CLOSE, true ) );
}
public function Test(){
btnOk.addEventListener(MouseEvent.MOUSE_DOWN, onOk);
btnCancel.addEventListener(MouseEvent.MOUSE_DOWN, onDelete);
}
}
}
子を生成時、親が子自身のボタンイベントを制御したい、
という処理です。
現象としては、
親ボタンによる子追加 → 子ボタンによる子削除
*1 →
親ボタンによる子追加 → 子ボタンによる子削除
*2 →
エラー発生
引用:
VerifyError: Error #1107: ABC データは破損しているため、境界外の読み取りが試行されました。
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Test/onOk()
また、*1と*2のボタンが異なる場合、以下のエラーも
合わせて出力されます。
引用:
ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
at flash.display::DisplayObjectContainer/removeChild()
at MethodInfo-7()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Test/onDelete()
元々Flexにて開発していたところ、後者のエラーが発生し、
Flashに還元し検証したところ、前者のエラーも合わせて確認した、
という経緯です。
前者のエラーについては、
こちらに説明が載っています。
実行関数を外出しにして制御した場合は正常に動作します。
詳細な原因および回避方法がお分かりでしたら
ご教示よろしくお願いいたします。