0

FlexActionscriptの質問。

画面上を移動するコールアウトボタンがあります。ドロップダウンを(クリックして)開くと、画面上の同じ位置に留まります(矢印のみが移動します)。コールアウトボタンの位置に従わない

このドロップダウンは、コールアウトボタンが移動したときの位置に追従するようにします(ボタンが移動したときにボタンをもう一度クリックしたときと同じように)。

MouseEvent.CLICKをディスパッチしようとしました。それは動作しません。また、closeDropDown()とopenDropDown()を実行するactionscriptを使用して、ドロップダウンを開いてから再度閉じようとしました。変化なし。

ありがとう

サンプルコード(creationCompleteからinit()を呼び出す):

    creationComplete="init();">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import flash.events.MouseEvent;

        import mx.events.DropdownEvent;

        private function init():void {
            var minuteTimer:Timer = new Timer(1*1000);
            minuteTimer.addEventListener(TimerEvent.TIMER, updateCalloutPosition);
            // starts the timer ticking
            minuteTimer.start();                
        }

        private function updateCalloutPosition(event:Event):void {
            myButton.closeDropDown();
            myButton.x = this.width * Math.random();
            myButton.y = this.height * Math.random();
//              myButton.openDropDown();
            myButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
        }

        protected function myButton_clickHandler(event:MouseEvent):void
        {
            if (myButton.isPopUp) {
                myButton.closeDropDown();
            }
            else {
                myButton.openDropDown();
            }
        }

    ]]>
</fx:Script>
<s:CalloutButton id="myButton" click="myButton_clickHandler(event)">
</s:CalloutButton>
4

1 に答える 1

0

私はいくつかの回避策を試しましたが、openDuration と closeDuration は DropDownList に対して機能しません。次のコードが役立つ場合があります。次のコードが役立つことを願っています。

<?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()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:ArrayCollection id="ac">
            <fx:String>AK</fx:String>
            <fx:String>AL</fx:String>
            <fx:String>AR</fx:String>
        </s:ArrayCollection>
    </fx:Declarations>
    <fx:Style>
        @namespace s "library://ns.adobe.com/flex/spark";
        @namespace mx "library://ns.adobe.com/flex/halo";

        s|DropDownList {
            openDuration: 0;
            closeDuration: 0;
        }
    </fx:Style>
    <fx:Script>
        <![CDATA[
            import flash.events.MouseEvent;

            import spark.components.supportClasses.DropDownListBase;
            import spark.components.supportClasses.TextBase;
            import spark.events.DropDownEvent;
            import spark.skins.spark.DropDownListSkin;
            import spark.utils.LabelUtil;

            private var storeVisible:Boolean = false;

            private function init():void {
                var minuteTimer:Timer = new Timer(1*1000);
                minuteTimer.addEventListener(TimerEvent.TIMER, updateCalloutPosition);
                minuteTimer.start();                
            }

            private function updateCalloutPosition(event:Event = null):void {
                myButton.x = this.width * Math.random();
                myButton.y = this.height * Math.random();
                if(myButton.isDropDownOpen)
                {
                    myButton.closeDropDown(false);
                    storeVisible = true;
                }
            }

            private function updateComp():void
            {
                if(storeVisible)
                {
                    myButton.openDropDown();
                    storeVisible = false;
                }
            }

        ]]>
    </fx:Script>

    <s:DropDownList id="myButton"  selectedIndex="0" dataProvider="{ac}" updateComplete="updateComp()"/> 
</s:Application>
于 2012-06-19T11:21:18.490 に答える