ActionScriptでテキスト入力を扱うTextFieldを試してみた。実際に試したコードは次の通り。二つのテキストフィールドを作成し、一方に文字列を入力し、それをもう一方にコピーするというもの。
wonderfl build flash online | 面白法人カヤック
package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.events.TextEvent; public class MyTextField extends Sprite { private var MyTextOut:TextField = new TextField(); public function MyTextField(){ var MyTextIn:TextField = new TextField(); MyTextIn.type = TextFieldType.INPUT; MyTextIn.x = 100; MyTextIn.y = 100; MyTextIn.width = 100; MyTextIn.height = 32; MyTextIn.border = true; addChild(MyTextIn); MyTextIn.addEventListener(TextEvent.TEXT_INPUT, textInputHandler); MyTextOut.x = 100; MyTextOut.y = 150; addChild(MyTextOut); } public function textInputHandler(event:TextEvent):void { MyTextOut.text = event.text; } } }
文字が入力されたときの処理はTextEventのtextInputイベントを用いている。入力された文字はTextEventのtextプロパティで取得できる。しかし、文字が入力されるときにイベントが呼ばれる。例えばABCとテキストを入力したときは、Aでイベントが呼び出され、次にBで、最後にCでイベントが呼び出され、それぞれ1文字ずつ取得することになる。これがテキストフィールドにペーストで文字列を入力した場合は一度にその文字列を取得することができる。ABCという文字列をコピーして、テキストフィールドにペーストしたときはABCの文字列がイベントで取得できる。
代わりにイベントが呼ばれたときにTextEventのtextプロパティを参照するのではなく、直接テキストフィールドのtextプロパティを参照するようにしてみたが、イベントが呼ばれた時点ではまだtextプロパティに入力された文字が代入されていないようだった。
うーむ、自分がやりたいことに関しては、この仕様はやっかいかも。