Как раскрасить некоторые слова в разные строки в RichTextBox? - PullRequest
0 голосов
/ 26 октября 2011

У меня проблемы, сегодня я попытался раскрасить несколько разных слов в разные строки, нажав на кнопку. Можете ли вы объяснить мне, как это сделать? Я смог сделать только это:

private void button1_Click(object sender, EventArgs e)
{    
    richTextBox1.Select(int start , int length); //It's wrong but It explains How to use .Select if you know start and length...
    richTextBox1.SelectionColor = Color.Blue;
}

Но как мне работать с строкой, число которой я знаю, имея уже текст в RichTextBox? Спасибо.

1 Ответ

2 голосов
/ 28 октября 2011

Если строки разделены \n, ваша проблема заключается в том, чтобы подсчитать количество \n символов, прежде чем доберетесь до требуемой строки.

Для этого вы можете использовать метод расширения:

public static int NthIndexOf(this String str, String match, int occurence) {
    int i = 1;
    int index = 0;

    while (i <= occurence && ( index = str.IndexOf(match, index + 1) ) != -1) {

        if (i == occurence) {
            // Occurence match found!

            return index;
        }
        i++;
    }

    // Match not found
    return -1;
}

Теперь вы можете найти значения start и end, чтобы закрасить выделение:

private void button1_Click(object sender, EventArgs e) {
    int lineNb = 13; // I assume you get this value initialized somewhere, 
                     // I wrote 13 for the example
    int start = richTextBox1.Text.NthIndexOf("\n", lineNb);
    int length = richTextBox1.Text.NthIndexOf("\n", lineNb + 1);
    richTextBox1.Select(start , length);
    richTextBox1.SelectionColor = Color.Blue;
}
...