2011-08-05 13 views
1

編集可能リストの 'up'と 'down'キーのデフォルト処理をオーバーライドしようとしています。エスケープキーが押されたように動作しますが、 'selected item bar'は上下に動きます。ここフレックス3:編集可能リストのkeyDownHandlerがフォーカスの問題を解決する

ある私の(簡体字)成分:

<?xml version="1.0" encoding="utf-8"?> 
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml" 
    enabled="true" width="100%" height="100%" 
    creationComplete="initialise()" 
    editable="true" 
> 
<mx:Script> 
    <![CDATA[ 
     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); 
     } 
    ]]> 
</mx:Script>  
これが機能しないいくつかの理由

:行が編集されている場合、「アップ」第一(又はダウン)キー押下終了編集し、バーを移動します。さらに上下のキーを押しても効果はありませんが、リストの近くをクリックすると作業が開始されます。これは私がそれが焦点の問題だと思うようにする。奇妙なことに、エスケープを押すと編集が終了し、正しく上下に移動できます。

リストにフォーカスを保持しようとすると 'callLater'行のコメントが外された場合、バーは最初にキー押し方向に移動しますが、元の行に戻って元の行を再編集します。

誰でもアイデアがありますか?事前に

おかげで、

マイク

答えて

0

私はソース、そして常にListEventReason.CANCELLEDさendEdit()の呼び出しのために提供される唯一の「理由」(「キャンセル」)を従うことをしようとしてきましたこれはあなたの問題かもしれません。

これはまだエスケープキーで動作する理由は、リストのeditorKeyDownHandler()関数によって処理されるためです。これは非公開です(私をオーバーライドすることはできません)。

0

継承されたkeydownの動作を上書きするには、Listを拡張する必要があります。

<?xml version="1.0" encoding="utf-8"?> 
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml" 
creationComplete="{creationCompleteHandler()}"> 
<mx:Script> 
    <![CDATA[ 
     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); 
     }   
    ]]> 
</mx:Script> 

:しかし、私はそれが行をクリックした後、最初のUPまたはDOWNのために働くが、私はそれ以降のKeyDownイベントを継続することができないようです
関連する問題