我有一个搜索功能,我可以从文本的开头到结尾在我的富文本框中搜索一个字符串。当我找到最后一个符合时,它从头开始。

这里的代码:

       #region Search

      private void txtSearch_KeyPress(object sender, KeyPressEventArgs e)
    {
        start = 0;
        end = 0;
    }

    //Searchfield
    private void toolStripTextBoxSearch_Click(object sender, EventArgs e)
    {

    }//end TextBoxSearch

    public int FindMyText(string txtToSearch, int searchStart, int searchEnd)
    {
        // Set the return value to -1 by default.
        int retVal = -1;

        // A valid starting index should be specified.
        if (searchStart >= 0)
        {
            // A valid ending index
            if (searchEnd > searchStart || searchEnd == -1)
            {
                // Find the position of search string in RichTextBox
                indexOfSearchText = richTextBox.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.None);
                // Determine whether the text was found in richTextBox1.
                if (indexOfSearchText != -1)
                {
                    // Return the index to the specified search text.
                    retVal = indexOfSearchText;
                }
            }
        }
        return retVal;
    }//end FindMyText

    private void buttonSearch_left_Click(object sender, EventArgs e)
    {

    }

    private void buttonSearch_right_Click(object sender, EventArgs e)
    {
        int startindex = 0;

        if (txtSearch.Text.Length > 0)
        {
             startindex = FindMyText(txtSearch.Text, start, richTextBox.Text.Length);
        }
            // If string was not found report it
            if (startindex < 0 )
            {
                if (stringfoundflag==1)
                {
                startindex = FindMyText(txtSearch.Text, 0, richTextBox.Text.Length); //Start at Pos. 0
                }
                else
                {
                    MessageBox.Show("Not found in Textfield", "Search", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }//end if

             if (startindex >= 0)
            {
                stringfoundflag = 1;
            // Set the highlight color as red
            //richTextBox.SelectionColor = Color.Red;
            // Find the end index. End Index = number of characters in textbox
            int endindex = txtSearch.Text.Length;
                // Highlight the search string
                richTextBox.Select(startindex, endindex);
                // mark the start position after the position of
                // last search string
                start = startindex + endindex;
        }
    }

    // Reset the richtextbox when user changes the search string
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        start = 0;
        indexOfSearchText = 0;
    }

    private void txtSearch_Enter(object sender, EventArgs e)
    {
        if (txtSearch.Text == "Search")
        {
            txtSearch.Text = "";
        }
    }

    private void txtSearch_Leave(object sender, EventArgs e)
    {
        if (txtSearch.Text == "")
        {
            txtSearch.Text = "Search";
        }
    }

    #endregion

我有两个按钮,一个向右搜索,一个向左搜索,右侧的工作原理与开头的描述相同。

问题:

我可以用我的解决方案将搜索功能从右到左的按钮反转,还是必须更改整个搜索功能?

示例:从第一个开始,然后跳到最后一个,然后倒数第二,依此类推。

最佳答案

我找到了解决我的问题的方法。

代码:

        public int FindMyTextleft(string txtToSearch, int searchStart, int searchEnd)
    {
        // Set the return value to -1 by default.
        int retVal = -1;

        // A valid starting index should be specified.
        if (searchStart >= 0)
        {
            // A valid ending index
            if (searchEnd > searchStart || searchEnd == -1)
            {
                // Find the position of search string in RichTextBox
                indexOfSearchText = richTextBox.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.Reverse);
                // Determine whether the text was found in richTextBox1.
                if (indexOfSearchText != -1)
                {
                    // Return the index to the specified search text.
                    retVal = indexOfSearchText;
                }
            }
        }//end FindMyTextleft
        return retVal;
    }//end FindMyText

    private void buttonSearch_left_Click(object sender, EventArgs e)
    {
        int startindex = 0;

        if (txtSearch.Text.Length > 0 & stringfoundflag == 1)
        {
            startindex = FindMyTextleft(txtSearch.Text, startindex, end);
        }

        else if (txtSearch.Text.Length > 0)
        {
            startindex = FindMyTextleft(txtSearch.Text, start, richTextBox.Text.Length);
        }
        // If string was not found report it
        if (startindex < 0)
        {
            if (stringfoundflag == 1)
            {
                startindex = FindMyTextleft(txtSearch.Text, 0, richTextBox.Text.Length); //Start at Pos. 0
            }
            else
            {
                MessageBox.Show("Not found in Textfield", "Search", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }//end if

        if (startindex >= 0)
        {
            stringfoundflag = 1;
            // Set the highlight color as red
            //richTextBox.SelectionColor = Color.Red;
            // Find the end index. End Index = number of characters in textbox
            int endindex = txtSearch.Text.Length;
            // Highlight the search string
            richTextBox.Select(startindex, endindex);
            // mark the start position after the position of
            // last search string
            end = startindex;
        }
    }//buttonSearch_left_Click

关于c# - 我可以在 Visual C# 中向后浏览文本以获取字符串吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38054095/

10-11 04:07