0

Since I have not been able to find an resolution via my searching endeavor, I believe I may have a unique problem. Essentially I am creating a gene finding/creation application in c#.NET for my wife and am using RichTextBoxes for her to be able to highlight, color, export, etc the information she needs. I have made several custom methods for it because, as I am sure we all know, RichTextBoxes from Microsoft leave much to the imagination.

Anyway, here is my issue: I need to be able to search for a term across hard returns. The users have strings in 60 letter intervals and they need to search for items that may cross that hard return barrier. For instance let's say I have 2 lines (I will make them short for simplicity): AAATTTCCCGGG TTTCCCGGGAAA

If the user runs a search for GGGTTT, I need to be able to pull the result even though there is a line break/hard return in there. For the life of me I cannot think of a good way to do this and still select the result in the RichTextBox. I can always find the result but getting a proper index for the RichTextBox is what eludes me.

If needed I am not against richTextBox.SaveFile() and LoadFile() and parsing the rtf text as a string manually. It doesnt have to be pretty, in this case, it just has to work.

I appreciate any help/guidance you may give.

Here is a relevant snippet:

        //textbox 2 search area (examination area)
    private void button5_Click(object sender, EventArgs e)
    {

        textBox3.Text = textBox3.Text.ToUpper();
        if (textBox3.Text.Length > 0)
        {
            List<string> lines = richTextBox2.Lines.ToList();
            string allText = "";
            foreach (string line in lines)
                allText = allText + line.Replace("\r", "").Replace("\n", "");
            if (findMultiLineRTB2(allText, textBox3.Text) != -1)
            {
                richTextBox2.Select(lastMatchForRTB2, textBox3.Text.Length);
                richTextBox2.SelectionColor = System.Drawing.Color.White;
                richTextBox2.SelectionBackColor = System.Drawing.Color.Blue;
            }//end if
            else
                MessageBox.Show("Reached the end of the sequence", "Finished Searching");
        }//end if
    }//end method

    private int findMultiLineRTB2(string rtbText, string searchString)
    {
        lastMatchForRTB2 = rtbText.IndexOf(searchString, lastMatchForRTB2 + 1);
        return lastMatchForRTB2;
    }
4

1 回答 1

1

所以我做了一个假设:你想在每行60个字符长的所有行中搜索一个单词。期望的结果是那个词的索引。

您只需要构建一个没有换行符的字符串,例如string.Join

string allText = string.Join("", richTextBox.Lines);
int indexOf = allText.IndexOf("GGGTTT");  // 9 in your sample
于 2013-10-15T15:38:58.863 回答