2011-01-16 15 views
0

新しく作成したTextFieldにプログラムでフォーカスを渡そうとしていますが、何らかの理由でsetSelectionsetFocusが機能しません。TextFieldでフォーカスと選択を設定するにはどうすればよいですか?

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="_init()"> 
<mx:Button click="{tf.setSelection(1,2)}" /> 
<mx:Script> 
<![CDATA[ 
import mx.core.UIComponent; 
    public var tf:TextField 


    private function _init():void{ 

     tf = new TextField(); 

      tf.text = "abcdefghijk"; 
    tf.type = TextFieldType.INPUT; 
    tf.autoSize = TextFieldAutoSize.LEFT; 

    var ui:UIComponent = new UIComponent(); 
    ui.addChild(tf); 
     addChild(ui); 
     tf.setSelection(0,1); 
     ui.setFocus(); 

     ui.addEventListener(MouseEvent.MOUSE_DOWN, function():void{ 
      tf.setSelection(0,3); 
     }); 
    } 

]]> 
</mx:Script>  
</mx:Application> 

何もしないだけsetSelectionMOUSE_DOWNに0,3いずれかになります。たとえば、以下の私のテストコードを参照してください。私はこれがマウスのクリックによるフォーカスを受けているテキストフィールドと何か関係があると思っていますが、私の人生にとってこれを手動で行う方法を理解することはできません。

答えて

1

フロリアンの提案によって動機付けられた他のクラスを調べると、TextFieldをサブクラス化するUITextFieldが出てきました。 IFocusManagerComponentインターフェイスは実装されていませんが、現時点では動作しているように見えるsetFocusメソッドがあります。

追加の利点として、コンテナに直接追加することができます。つまり、UIComponentの親を最初に構築する必要はありません。

1

setFocusは、mx.managers.IFocusManagerComponentを実装するコンポーネントで機能します。 TextfieldはFlexコンポーネントではなく、このインターフェイスを実装していないため、動作しません。私があなたであれば、入力コントロールが必要だとわかる代わりに、TextInputを使用します。

+0

TextInputクラスのサイズが大きすぎるか、単純なもの(例えば、自動サイズ変更)が難しいと感じているので、TextFieldを使用することにしました。ホワイトボードで使用するためのテキスト領域やラベルを作成しようとしているので、私は仕事のための適切なクラスを選択することが重要です。そうしないと、将来の単純なものがはるかに難しくなる可能性があります。 – cammil

関連する問題