Flex 3:編集可能なリストのkeyDownHandlerをオーバーライドするとフォーカスの問題が発生する

flex handler keydown list override
Flex 3:編集可能なリストのkeyDownHandlerをオーバーライドするとフォーカスの問題が発生する

編集可能なリストの「上」キーと「下」キーのデフォルトの処理をオーバーライドしようとしています。これらのキーが押されると、編集中のリストエントリはエスケープキーが押されたように動作しますが、選択された項目バーが上下に移動します。

これが私の(簡略化された)コンポーネントです。

        import mx.collections.ArrayCollection;

        private function initialise():void
        {
            dataProvider = new ArrayCollection(["this", "is", "a", "very", "simple", "example"]);
        }

        override protected function keyDownHandler(event:KeyboardEvent):void
        {
            if (event.keyCode == Keyboard.ESCAPE
                || event.keyCode == Keyboard.DOWN
                || event.keyCode == Keyboard.UP)
                    endEdit("ENDEDIT"); // Same behaviour with destroyItemEditor();

            super.keyDownHandler(event);
            //callLater(this.setFocus);
        }

何らかの理由でこれは機能しません。行が編集されている場合、最初の「上」(または下)キーを押すと編集が終了し、バーが移動します。 さらに上または下のキーを押しても効果はありませんが、リストの近くをクリックすると機能し始めます。 これは私がそれを焦点の問題だと思うようにします。 奇妙なことに、エスケープを押すと編集が終了し、正しく上下に移動できます。

「callLater」行のコメントを外してリストにフォーカスを保持しようとすると、バーは最初にキーを押した方向に移動しますが、その後再び戻り、元の行を再編集します!

誰かアイデアがありますか?

前もって感謝します、

Mike

  1  0


ベストアンサー

私はソースを追跡しようとしましたが、endEdit()呼び出しに提供される唯一の「理由」は常にListEventReason.CANCELLED(「キャンセル」)であり、これが問題の可能性があります。

これがエスケープキーでも機能する理由は、プライベートキーであるListのeditorKeyDownHandler()関数で処理されるためです(nah-nah、オーバーライドできません)。

0


Listを拡張して、継承されたキーダウンの動作をオーバーライドする必要があります。 ただし、行をクリックした後、最初のUPまたはDOWNで機能するようになりましたが、後続のキーダウンイベントを続行できないようです。

        override protected function keyDownHandler(event:KeyboardEvent):void
        {
            if (itemEditorInstance)
            {
                destroyItemEditor();

                if (event.keyCode == Keyboard.UP)
                {
                    if (selectedIndex == 0)
                    {
                        selectedIndex = this.dataProvider.length - 1;
                    }
                    else
                    {
                        selectedIndex--;
                    }
                }
                else if (event.keyCode == Keyboard.DOWN)
                {
                    if (selectedIndex == this.dataProvider.length - 1)
                    {
                        selectedIndex = 0;
                    }
                    else
                    {
                        selectedIndex++;
                    }
                }

            }
            super.keyDownHandler(event);
        }

0


タイトルとURLをコピーしました