2009-06-19 8 views
1

フレックスのテキスト編集コントロール(mx:TextField、mx:TextArea)は、選択したテキスト(selectionBeginIndexselectionEndIndexsetSelection)で「stuff」を実行する機能を提供しますが、一種のものを提供していないようです。フレックス:mx:Labelまたはmx:Textで選択したテキストで* * *を実行しますか?

いくつかの調整をした後、私はラベルをサブクラス化してから、基礎となるTextFieldインスタンスへのアクセスを提供する関数を書こうとしました...しかし、それでも選択を設定しても機能しませんでした!

function get selectionBeginIndex():int { 
    // This works 
    return this.textField.selectionBeginIndex; 
} 

function get selectionEndIndex():int { 
    // This works 
    return this.textField.selectionEndIndex; 
} 

function setSelection(beginIndex:int, endIndex:int):void { 
    // But this has no effect! 
    this.textField.setSelection(beginIndex, endIndex); 
} 

だから、変更/ MXで選択されたテキストにアクセスするための任意のより良い方法があります:ラベルとMX:テキストコントロール?使用する "より良い"コントロールがありますか?

答えて

4

編集可能なプロパティをfalseに設定してTextInputを使用し、ラベルの代わりにborderStyleを「なし」に設定する方がよい場合があります。

テキストコンポーネントについては、マウスで表示されたテキストを選択することができ、複数の行をサポートできるため、特定の状況ではラベルよりも少し優れています。しかし、私はあなたがそれをサブクラス化すれば、あなたがラベルをサブクラス化することでより多くの成功を収めていると思うが、あなたがプログラム的にテキストを選択できるかどうかわからない。あるいは、TextInputで述べたのと同じプロパティを持つTextAreaを使用することもできます。

あなたはvalidatePropertiesメソッドをオーバーライドすることができ、彼のテキストに基づいてサイズを変更するTextInputを行い、必要な幅を計算するために)(にgetLineMetricsを使用するには:

public override function validateProperties():void 
    { 
     super.validateProperties(); 
     var tm : TextLineMetrics = this.getLineMetrics(0); 
     var txtWidth : uint = tm.width + tm.leading + 10; 
     this.width = minWidth < txtWidth ? txtWidth : minWidth; 
    } 

「10」の値が基づいて変更する必要があるかもしれないことをあなたがおそらく使用するフォント。 入力中にTextInputのサイズを変更する必要がある場合は、その変更イベントをリッスンし、ハンドラからvalidatePropertiesを呼び出す必要があります。

+1

私はそのTextInputトリックの使用を検討していました...実際に動作することを確認していただきありがとうございます。 さらに、サブクラス化Text VS Label:TextはLabelのサブクラスで、 "selectable = 'true'"を設定することによってLabelを選択可能にすることができます。しかし、テキストをサブクラス化することはあまり役に立ちませんでした:( –

+0

私はTextを使用したかった理由は、TextInputが入力に合うように成長するということでした。 –

+1

+1ラベルは他のコントロールにラベルを付ける意味で、インタラクティブな要素ではありません。 – Soviut

1

Flash TextFieldのフレックスバージョンであるUITextFieldを使用すると便利です。これは、テキストを表示するためにTextArea内で使用されるオブジェクトです。これは、あなたが探しているそれらのインデックスをサポートしています。

スタイリングはちょっと変わっていることに注意してください。 "setStyle"は何もしません。また、setTextFormatを使用するにはvalidateNow関数をオーバーライドする必要があります。そうしないと、設定が消去されます。私はCSSをどのように使用するのかよく分かっていませんが、それは当時懸念事項ではありませんでした。

関連する問題