2011-12-04 9 views
1

私はTextArea、TextInput、およびボタンを持っています。 TextInputにテキストを入力すると、一致する文字列がTextAreaで検索されますが、最初に見つかった文字列のインスタンスのみが強調表示されます。どのようにして「次を見つける」操作を行うことができますか?フレックス:TextAreaの文字列の次のインスタンスを見つける

protected function searchBtn_clickHandler():void 
     { 
      text = mainTextField.text; 
      search_Str = searchTxt.text; 

      var search_result:int = text.search(search_Str); 
      trace(search_result); 
      mainTextField.setFocus(); 
      mainTextField.selectRange(search_result,search_result+search_Str.length); 
     } 

EDIT

protected function searchBtn_clickHandler():void 
     { 
      text = mainTextField.text; 
      search_Str = searchTxt.text; 

      search_result = text.search(search_Str); 
      trace(search_result); 
      mainTextField.setFocus(); 
      mainTextField.selectRange(search_result,search_result+search_Str.length); 
      oldSearch_result = search_result; 
     } 

     protected function findNextBtn_clickHandler():void 
     { 
      search_Str = searchTxt.text; 

      // truncate the text using substring; this gives you everything in mainTextField after your previous search results 
      var truncatedText:String = mainTextField.text.substring(oldSearch_result+search_Str.length); 

      search_result = truncatedText.search(search_Str); 
      mainTextField.setFocus(); 
      // when you select the range, you want to offset your result index w/ the characters your chopped off 
      mainTextField.selectRange(oldSearch_result+search_Str.length+search_result,search_result+search_Str.length); 

     } 

答えて

2

ユーザーがボタンを「次を検索」をクリックすると、ちょうどsearch_str.lengthとsearch_resultに基づいてテキストを切り捨てる - メモリに - して、再度検索を実行。ここでsubstring


編集2011年12月7日

protected function searchAgain_ClickHandler(event:Event):void{ 
    search_Str = searchTxt.text; 

    // truncate the text using substring; this gives you everything in mainTextField after your previous search results 
    var truncatedText = mainTextField.text.substring(oldSearchResult+search_Str.length); 

    var search_result:int = truncatedText.search(search_Str); 
    mainTextField.setFocus(); 
// when you select the range, you want to offset your result index w/ the characters your chopped off 
mainTextField.selectRange(oldSearchResult+search_Str.length+search_result,search_result+search_Str.length); 

} 

詳細情報は、このアプローチの作業を示す完全なコードサンプルです:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 

      import spark.layouts.HorizontalLayout; 

      protected var oldSearchResult :int =0; 

      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       var search_Str : String = searchTxt.text; 

       // truncate the text using substring; this gives you everything in mainTextField after your previous search results 
       var truncatedText : String; 
       truncatedText = mainTextField.text.substring(oldSearchResult); 

       var search_result:int = truncatedText.search(search_Str); 
       mainTextField.setFocus(); 
       // when you select the range, you want to offset your result index w/ the characters your chopped off 
       if(search_result != -1){ 
        mainTextField.selectRange(oldSearchResult+search_result,oldSearchResult+search_result+search_Str.length); 
        oldSearchResult = oldSearchResult+search_result+search_Str.length; 
       } else { 
        Alert.show('no more results'); 
       } 

      } 
     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <s:Form height="100%" width="100%"> 
     <s:FormItem label="Search Text" layout="{new HorizontalLayout()}" width="100%" > 
      <s:TextInput id="searchTxt" text="the" /> 
      <s:Button label="Search Next" click="button1_clickHandler(event)" /> 
     </s:FormItem> 
     <s:FormItem height="100%" width="100%"> 
      <s:TextArea id="mainTextField"> 
       <s:text> 
        The Quick Brown Fox Jumped Over The Lazy Dogs and Landed on the Other Side of the River, bouncing back and forth between two turtles in an attempt to escape the flying vulture. 
       </s:text> 
      </s:TextArea> 
     </s:FormItem> 
    </s:Form> 
</s:WindowedApplication> 
+0

感謝します。 :D – RapsFan1981

+0

フォローアップの質問が1つあります。 「次を検索」ボタンを押すと、文字列の次のインスタンスの前のすべてが強調表示されます。私はoldSearch_result = search_result + search_Str.length;を設定しました。それは何でしょうか? – RapsFan1981

+0

私はあなたのコードを見て、デバッグする必要があります。範囲を選択するために間違った値を使用しているようですが、誤った場所で検索を開始する可能性があります。私は私の答えで説明するコンセプトを書いていると信じていますが、私はブラウザに書いたので、いくつかの複雑さがあるかもしれません。 – JeffryHouser

関連する問題