Flex クリックやフォーカスイン時にTextInputのテキストを選択状態にするサンプル
Flex クリックやフォーカスイン時にTextInputのテキストを選択状態にするサンプルです。
![]()
Flex(AIR) にてテキストボックスを配置する場合、TextInput コントロールを利用します。
今回は「クリックされた時やフォーカスインした際に、入力された値を選択状態にする方法」をご紹介したいと思います。
目次
完成図
完成図はこんな感じです。
![]()
サンプルソース
それでは、実際のソースを見ながら解説してきます。
CharacterTextInput.as
TextInput クラスを継承した CharacterTextInput を用意しました。
package
{
  import flash.events.Event;
  import flash.events.FocusEvent;
  import flash.events.MouseEvent;
  import mx.controls.TextInput;
  /**
   * TextInput for Character input.
   */
  public class CharacterTextInput extends TextInput
  {
    // テキストを選択状態に設定
    private var firstClickFlg:Boolean = true;
    /**
     * コンストラクタ
     */
    public function CharacterTextInput()
    {
      super();
      this.addEventListener(MouseEvent.CLICK, function(event:Event):void {
        if ( event.currentTarget.text != "" && event.currentTarget.text != undefined ) {
          // 初回のみ選択状態を作る
          if ( this.firstClickFlg )
            event.currentTarget.setSelection(0, event.currentTarget.length);
          this.firstClickFlg = false;
        }
      });
    }
    /**
     *  @private
     *  Gets called by internal field so we draw a focus rect around us.
     */
    override protected function focusInHandler(event:FocusEvent):void {
      super.focusInHandler(event);
      // テキストを選択状態に設定
      if ( event.currentTarget.text != "" && event.currentTarget.text != undefined )
        event.currentTarget.setSelection(0, event.currentTarget.length);
      this.firstClickFlg = false;
    }
    /**
     *  @private
     *  Gets called by internal field so we remove focus rect.
     */
    override protected function focusOutHandler(event:FocusEvent):void
    {
      super.focusOutHandler(event);
      this.firstClickFlg = true;
    }
  }
}
コンストラクタ
マウスでクリックされたときに、setSelection を使って、テキストを選択状態にしています。ただし、選択状態を解除できないと、これはこれで入力しにくいので、一度だけ選択状態を作り、その後解除しています。
フォーカスインイベントハンドラ(focusInHandler)
ここでも、setSelection を使って、テキストを選択状態にしています。
フォーカスアウトイベントハンドラ(focusOutHandler)
ここでは、再度クリックされた時を考慮し、一度だけ選択状態を作るフラグを戻しています。
CharacterTextInputTest.mxml
表示する画面は以下の通りです。画面デザインを整えるために、css を用意しています。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx"
         xmlns:local="*"
         initialize="onInit()"
         width="600"
         height="40"
         >
  <fx:Script>
    <![CDATA[
      /**
       * 初期化
       */
      protected function onInit():void {
        StyleManager.getStyleManager(null).loadStyleDeclarations("css/blue.swf");
      }
    ]]>
  </fx:Script>
  <fx:Declarations>
  </fx:Declarations>
  <mx:VBox width="100%">
    <mx:FormItem width="100%" label="文字列入力">
      <s:HGroup width="100%" gap="0">
        <local:CharacterTextInput id="stringText" text="選択状態" width="100" imeMode="JAPANESE_HIRAGANA" />
        <mx:Text text="クリックすると一度だけテキストが選択状態になります。"/>
      </s:HGroup>
    </mx:FormItem>
  </mx:VBox>
</s:Application>
サンプルソースのダウンロード
サンプルソースは こちら からダウンロードできます。
おつかれさまでした。