0

別のパネル/ページを強調表示/ナビゲートする前に、ユーザーに確認を求める方法は?

画面にいくつかのパネルがあります。各パネルには多くのコントロールがあります。[OK] ボタンと [キャンセル] ボタンを使用してメッセージ ボックス (または警告) を表示し、ユーザーが別のパネルをクリックするたびに確認したいと思います。

ユーザーが「OK」ボタンをクリックすると、別のパネル/ページに移動します。ユーザーが [キャンセル] ボタンをクリックすると、アラートが削除され、同じパネルにフォーカスされます。

現在、パネルの focus_out イベント (focusOutHandler(event:FocusEvent)) を使用してこれを実装しています。別のパネルにあるボタンをクリックすると、アラートが表示されましたが、アラートで「OK」をクリックしても何も起こりません(ボタンクリックはイベントが発生しません)

前もって感謝します

4

2 に答える 2

0

ジェームズの投稿に関するコメントに従って、ここにサンプルを投稿しています。同じものを探しているかどうかはわかりません。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

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

            private var storeNextFocusID:String = "first";
            private var storePreviousFocusID:String = "first";

            private function firstFocus():void
            {
                first.setFocus();   
                storePreviousFocusID = first.name;
            }

            private function showFirstTimeAlert(event:MouseEvent):void
            {
                if(event.currentTarget.name != storePreviousFocusID)
                {
                    Alert.show("Do you want to change Tab?","Alert",Alert.OK|Alert.CANCEL,null,closeHandler)
                    storeNextFocusID = event.currentTarget.name;
                }
            }

            private function closeHandler(event:CloseEvent):void
            {
                if(event.detail == Alert.OK)
                {
                    var focusCont:HGroup = mainContainer.getChildByName(storeNextFocusID) as HGroup;
                    focusCont.setFocus();
                    storePreviousFocusID = storeNextFocusID;
                } else
                {

                } 
            }
        ]]>
    </fx:Script>
    <s:VGroup id="mainContainer" x="50" y="50" width="400" height="300" creationComplete="firstFocus()">
        <s:HGroup  id="first" name="first" width="100%" height="100%" click="showFirstTimeAlert(event)">
            <mx:TabNavigator  width="100%" height="100%">
                <mx:VBox label="left">
                    <mx:Label text="labelPlacement = 'left'" />
                </mx:VBox>
                <mx:VBox label="right">
                    <mx:Label text="labelPlacement = 'right'" />
                </mx:VBox>
            </mx:TabNavigator>
            <s:Panel  width="100%" height="100%">
            </s:Panel>
        </s:HGroup>

        <s:HGroup  id="second" name="second" width="100%" height="100%"  click="showFirstTimeAlert(event)">
            <mx:TabNavigator width="100%" height="100%">
                <mx:VBox label="top">
                    <mx:Label text="labelPlacement = 'top'" />
                </mx:VBox>
                <mx:VBox label="bottom">
                    <mx:Label text="labelPlacement = 'bottom'" />
                </mx:VBox>
            </mx:TabNavigator>
            <s:Panel  width="100%" height="100%">
            </s:Panel>
        </s:HGroup>

    </s:VGroup>

</s:Application>
于 2012-06-26T08:46:14.580 に答える
0

その音から、アラートのどのボタンがクリックされたかに応じて反応したいですか?

その場合は、Alert クラスに組み込まれているクローズ ハンドラを使用します。

Alert クラスには、次のシグネチャを持つ静的メソッド show があります。

public static function show(text:String = "", title:String = "", flags:uint = 0x4, parent:Sprite = null, closeHandler:Function = null, iconClass:Class = null, defaultButtonFlag:uint = 0x4, moduleFactory:IFlexModuleFactory = null):Alert

flags引数にパイプ演算子を使用して 2 つのフラグを追加する

Alert.OK || Alert.CANCEL次に、引数にクローズハンドラーを追加すると、closeHandlerクリックされたボタンを調べて、それに応じて反応できます。

このようなもの:

アラート: Alert.show("Alert Title","Would you like to proceed?",Alert.OK || Alert.CANCEL,this,onClose)

onClose 関数:

private function onClose(event:CloseEvent)
{
    if (eventObj.detail==Alert.OK) 
    {
      //proceed
    }
    else
    {
      //cancel operation
    }
}
于 2012-06-25T15:34:22.470 に答える