Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex:在TextArea中查找字符串的下一个实例_Apache Flex_Air_Adobe - Fatal编程技术网

Apache flex Flex:在TextArea中查找字符串的下一个实例

Apache flex Flex:在TextArea中查找字符串的下一个实例,apache-flex,air,adobe,Apache Flex,Air,Adobe,我有一个文本区,一个文本输入和一个按钮。当文本输入到TextInput中时,TextArea将搜索匹配的字符串,但它仅高亮显示第一个找到的字符串实例。如何执行“查找下一个”类型的操作 protected function searchBtn_clickHandler():void { text = mainTextField.text; search_Str = searchTxt.text; var se

我有一个文本区,一个文本输入和一个按钮。当文本输入到TextInput中时,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);
        }
编辑

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);

        }
当用户单击“查找下一步”按钮时,只需根据搜索长度和搜索结果(在内存中)截断文本,然后再次执行搜索

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);

}
更多关于


2011年7月12日编辑

下面是一个完整的代码示例,显示了此方法的工作原理:

<?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>

这只敏捷的棕色狐狸跳过懒狗,降落在河的另一边,在两只乌龟之间来回跳跃,试图逃离这只会飞的秃鹫。

一个后续问题。当我按下Find Next按钮时,它会高亮显示字符串下一个实例之前的所有内容。我设置了oldSearch\u result=search\u result+search\u Str.length;。应该是什么?我必须查看并调试你的代码。听起来您使用了错误的值来选择范围;或者可能在错误的位置开始搜索。我相信我在回答中解释的概念是写,但我是在浏览器中写的,所以我可能弄错了一些复杂的地方。我编辑了代码。如果我的文本区域中有文本,则“查找”按钮将在searchTxt中查找该字符串的第一个实例,但当我单击“查找下一个”时,它会在该字符串下一次出现之前直接高亮显示所有内容,因此,如果有意义的话,它将在应该开始的地方结束Highlight。我更新了我的答案,包括一个完整的代码示例,演示我的解决方案。如果它解决了问题,请告诉我。:=)如果是,那是不是意味着我得到了赏金?