2009-07-10 7 views
2

フォーカスを合わせる(タブまたはクリック)ときにすべてのテキストを選択できるように、TextFieldでフォーカスイベントを処理しようとしています。私はここで何か間違っているように見えますか?AS3:TextField Focus

txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 
function handleFocusIn() { 
//select all text here 
} 

答えて

4

あなたhandleFocusInは、署名に

function handleFocusIn(event:FocusEvent) // or just Event 
2

を持っている必要があり、私は(Flashでの)開発のプロトタイプ段階で同様の問題がありました。 テキストフィールドでFocusEvent.FOCUS_OUTイベントが発生していませんでした。 問題はステージ上にButtonコンポーネントがあることでした。 フラッシュボタンコンポーネントのインスタンスを最初から作成したカスタムボタンで置き換えるとすぐに機能します。 私はこのバグとインターネット上の解決策を見つけることができませんでした。

ステージ上のボタンコンポーネントを使用すると、最初にFOCUS_INイベントが表示されます。 その後、私はFOCUS_OUTイベントもFOCUS_INイベントも起動しません。

これは誰でも助けてくれることを願っています。

5

フォーカスを受け取ったときにテキストフィールドの内容を選択するのと同じことが必要でした。

私が試した:

A)だけのFocusEvent後に選択します。これは動作していないようです(私の推測では、マウスクリックが処理される前にFocusEventsが起動され、選択が取り消されます)。

B)マウスクリックごとに選択します。これは機能しますが、これは後でテキストの一部だけを選択したいユーザーにとっては非常に面倒です。この試みは常にコンテンツが選択されるためです。

次の回避策は、しかし動作するようです:

myTextField.addEventListener(MouseEvent.CLICK, selectAllOnce); 

    function selectAllOnce(e:MouseEvent) { 
     e.target.removeEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.addEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
     selectAll(e); 
    } 

    function addSelectListener(e:FocusEvent) { 
     e.target.addEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.removeEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
    } 

    function selectAll(e:Event) { 
     e.target.setSelection(0, e.target.getLineLength(0)); 
    } 

お役に立てば幸いです。私は個人的には、TextFieldオブジェクトに対してこのオプションを単に追加しただけでは最も論理的だと思います。

2

私はこのようなハンドラーをやっています。作品の魅力のように:

private function onFocusIn(e:FocusEvent):void 
{ 
    setTimeout(title.setSelection, 100, 0, e.target.text.length);   
} 
0

ユーザーがこのようなテキストの一部だけを選択されていません見つけることができます。

private function clickHandler(e:MouseEvent){ 
    if(tfield.selectionBeginIndex == tfield.selectionEndIndex){ 
     tfield.setSelection(0, tfield.length); 
    } 
} 
0

簡単な解決策は次のとおりです。

import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.events.FocusEvent; 

tf.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 

function handleFocusIn(e:FocusEvent):void 
{ 
    tf.addEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

function preventLosingSelection(e:MouseEvent):void 
{ 
    tf.removeEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

ホープこのヘルプ将来の誰か!