0

やりたいことに対して間違ったコンポーネントを使用しようとしているのかもしれません。2 つの項目を含む PopUpMenuButton があります。ユーザーがポップアップ メニューの項目を選択したときにのみアクションを実行したい。

必要なアクションを実行するために itemClick イベントを設定しました。

このボタンは、下矢印をクリックしたときにのみメニューを表示しますが、ボタンがどこでクリックされたかに関係なく、itemClick イベントが発生します。そのため、ユーザーがメニューを表示/選択せずに、最後に選択した項目に基づいてアクションが実行されるという望ましくない動作が発生しています。

ユーザーがメニューの下矢印またはボタンのメイン部分をクリックしたためにイベントが発生したかどうかを区別するにはどうすればよいですか?

これに別の方法でアプローチする必要がありますか?

ありがとう、

ジョン

4

2 に答える 2

0

ここにあるこの例を見ると、MenuEvent の label プロパティにアクセスできることがわかります。PopUpMenu 内の項目に異なるラベルが付いている限り、例のように単純なロジックを使用してどのボタンがクリックされたかを判断できます。

于 2013-12-30T22:43:50.533 に答える
0

ボタンの代わりにポップアップ メニュー インスタンスを聞いてみませんか?

手順:

  1. ボタンに開閉イベント ハンドラを追加します。
  2. 開閉イベント ハンドラでITEM_CLICKは、まさにメニューである popping インスタンスにイベントを追加できます。

コード:

<fx:Script>
    <![CDATA[
        import mx.events.DropdownEvent;
        import mx.events.MenuEvent;

        protected function pmb_openHandler(event:DropdownEvent):void
        {
            pmb.popUp.addEventListener(MenuEvent.ITEM_CLICK,onMenuItemClick);
        }

        protected function pmb_closeHandler(event:DropdownEvent):void
        {
            pmb.popUp.removeEventListener(MenuEvent.ITEM_CLICK,onMenuItemClick);
        }

        private function onMenuItemClick(event:MenuEvent):void
        {
            trace(">>>onMenuItemClick on Menu : ", event.item.@label);  
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- A an data provider in E4X format. -->
    <fx:XMLList id="treeDP2">
        <node label="Inbox"/>
        <node label="Calendar"/>
        <node label="Deleted Items"/>
    </fx:XMLList>
</fx:Declarations>

<mx:HBox>
    <mx:PopUpMenuButton 
        id="pmb"
        dataProvider="{treeDP2}"
        labelField="@label"
        open="pmb_openHandler(event)"
        close="pmb_closeHandler(event)"
        />
</mx:HBox>
于 2014-01-06T14:58:19.230 に答える