0

Groupに数十個のLabelを作成し、すべての Label に右クリック メニューを追加し、メニューにイベントリスナーを追加してから、右クリックした正確な Label をメニュー項目の select リスナーを介して取得する方法 ( ContextMenuEvent.MENU_ITEM_SELECT )? どうもありがとう

4

3 に答える 3

0

メニュー項目をクリックするたびに、mouseTarget プロパティに親の情報が含まれます。

// Handler when customized menu items are selected.       
private function menuItemHandler(event:ContextMenuEvent):void {
        var obj:InteractiveObject = event.mouseTarget;
        if(obj is Label)
             Alert.show(Label(obj).id);
}

これが役立つかどうかを確認してください。

小さなアプリ。

<?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"
               creationComplete="init()">

    <s:layout>
        <s:BasicLayout/>
    </s:layout>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

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

            [Bindable]
            private var cm:ContextMenu;
            private var cmi:ContextMenuItem;

            private var item1:ContextMenuItem;
            private var item2:ContextMenuItem;
            private var item3:ContextMenuItem;
            private var item4:ContextMenuItem;
            private var item5:ContextMenuItem;

            private function init():void
            {
                cmi = new ContextMenuItem("Some Context Item");
                cmi.enabled = false;

                item1 = new ContextMenuItem("Customized item", true);
                item2 = new ContextMenuItem("Enable/Disable customized menu entry", true);
                item3 = new ContextMenuItem("Visible/Invisible customized menu entry");
                item4 = new ContextMenuItem("Copy\u00A0");
                item5 = new ContextMenuItem("More Flex tutorials", true);

                // Manage clicks on your customized items
                item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
                item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
                item3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
                item4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
                item5.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);

                cm = new ContextMenu();
                cm.hideBuiltInItems();
                cm.customItems = [cmi, item1, item2, item3, item4, item5];
                cm.addEventListener(ContextMenuEvent.MENU_SELECT, onMnuSelect);
            }

            private function onMnuSelect(event:ContextMenuEvent):void
            {
                /* var obj:InteractiveObject = event.mouseTarget;
                if(obj is Label)
                    Alert.show(Label(obj).id); */
            }

            // Handler when customized menu items are selected.       
            private function menuItemHandler(event:ContextMenuEvent):void {
                var obj:InteractiveObject = event.mouseTarget;
                if(obj is Label)
                    Alert.show(Label(obj).id);
            }
        ]]>
    </fx:Script>

    <s:VGroup>
        <s:Label id="label1" text="label1" contextMenu="{cm}"/>
        <s:Label id="label2" text="label2" contextMenu="{cm}"/>
        <s:Label id="label3" text="label3" contextMenu="{cm}"/>
        <s:Label id="label4" text="label4" contextMenu="{cm}"/>
    </s:VGroup>


</s:Application>
于 2012-05-15T11:36:42.743 に答える
0

1 つの解決策は、Label および Menu スキン パーツを含むカスタム コンポーネントを作成することです。このようにして、コンポーネントを好きなようにスキンすることもでき、非常に簡単な方法でラベルとメニューにアクセスできます。

問題を解決するために、スキン パーツの名前が「label」と「menu」であるとします。ContextMenuEvent がディスパッチされると、メニュー クリック ハンドラの event.target プロパティにアクセスすることで、クリックされたメニューにアクセスできます。これで、その親はそのプロパティを介して利用できるようになり、これがラベル コンポーネントまたはスキン パーツにアクセスする方法です。したがって、次のようになります。

event.target.parent.label

どこ:

event.target - メニュー コンポーネント

event.target.parent - ラベルとメニューをラップするコンポーネント

event.target.parent.label - アクセスしたいコンポーネント

要約すると、スキン パーツとなるラベルとメニューをラップするカスタム コンポーネントを作成します。このように、(イベント ハンドラーなどで) 2 つの部分のいずれかを識別することにより、 parentプロパティを介して、対応する他のコンポーネントを簡単に判別できます。

event.target値をメニュー クラスにキャストし、event.target.parentプロパティをカスタム コンポーネント クラスにキャストする必要がある場合があります。そうすれば、ラベルを使用できるようになります。

于 2012-05-15T09:12:29.080 に答える
0

Label をコンポーネントとして使用している場合は、次の方法でアクセスできます。

event.contextMenuOwner.text 

また

ボタンを使用している場合は、次の方法でアクセスできます。

event.contextMenuOwner.label

これが役立つことを願っています。

于 2012-05-15T09:40:05.707 に答える