0

フラッシュでカスタムモーダルダイアログを作成しようとしています。私が選択した方法は、ボタンを追加する関数を備えたダイアログのUIを使用してムービークリップクラスを作成することです。次に、すべてのボタンを追加した後でUIのサイズを変更し、画面に表示します。

この時点までは機能します。ここで、このダイアログと呼ばれるものはすべて、ボタンが選択されるまで待ってから、ユーザーが他のことを実行できるようにします。次のようなもの:

var dialog:MyDialog = new MyDialog();
dialog.addButton(new MyButton("Foo"));
dialog.addButton(new MyButton("Bar"));
var result:String = dialog.show(); // we will wait here

dialog.showで、ムービークリップを表示し、ユーザーがダイアログのボタンをクリックしてから戻るのを待ちます。ただし、MouseEvent.CLICKイベントは非同期であるため、それを待つ方法がわかりません。

別の方法は、ダイアログを呼び出している画面に追加されるダイアログのカスタム完了イベント全体を作成することです。これにより、ロジックを続行し、他の入力を無効にするブール値を設定できますが、これはかなり面倒で、私はそのようなことは決してしませんでした。

4

1 に答える 1

1

あなたが説明しているのは、同期と非同期が何であるかについての誤解です。

ダイアログが表示されても、ユーザーがダイアログボタンを押すことができるようにする必要があります。プロシージャが同期している場合、マウスクリックアクションのルーチンが到着しないため、プログラム全体がフリーズします。フラッシュはシングルスレッドであることを忘れないでください。

ポップアップのあるスレッドは、基盤となるアプリと同じスレッドを共有しています。

最も簡単なのは、アプリケーションでリッスンできるクローズイベントをディスパッチするイベントをボタンに設定することです。カスタムイベントクラスは必要ありません。

dispatchEvent(new Event("close"))

例として。

ユーザーがアプリケーションの外部でパーツを操作することを心配している場合は、mouseEnabled trueを使用してポップアップの後ろに長方形を描くか、Flexのモデルダイアログクラスを使用してチェックアウトできます。

于 2012-07-07T18:52:51.127 に答える