выделите «#» до конца строки в richtextbox - PullRequest
1 голос
/ 01 ноября 2011

У меня есть следующий текст в RIchTextBox:

foo:baa#done baa
a:b#pending  ee

, и я хочу выделить все после # и до " " (espace)

Как мне это сделать?Я попытался сделать end в качестве IndexOf \t или " ", но он возвращает -1.

Мой код (не работает должным образом):

        string[] lines = list.Lines;
        string line;

        for (int i = 0, max = lines.Length; i < max; i++)
        {
            line = lines[i];
            int start = list.Find("#");
            int end = ??? // I tried list.Find("\t") and list.Find(" ")
            if (-1 != start || -1 != end)
                {
                    list.Select(start, end);
                    list.SelectionColor = color;
                }
          }

list - это RichTextBox

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Используйте GetLineFromCharIndex (), чтобы получить номер строки возвращаемого значения метода Find ().Затем GetFirstCharIndexFromLine (строка + 1), чтобы узнать, где начинается следующая строка.Это дает вам значения SelectionStart и SelectionLength, необходимые для выделения текста.

2 голосов
/ 01 ноября 2011

попробуйте это:

        string[] lines = list.Lines;
        string line;
        int len = 0;
        for (int i = 0, max = lines.Length; i < max; i++)
        {
            line = lines[i];
            int j = i == 0 ? 0 : len;
            string str = Regex.Match(line, @"#.*$").Value;
            if (!string.IsNullOrEmpty(str))
            {
                int start = list.Find(str, j, RichTextBoxFinds.None);
                if (start != -1)
                {
                    list.Select(start, str.Length);
                    list.SelectionColor = Color.Red;
                }
                len += line.Length;
            }
        }
1 голос
/ 01 ноября 2011

Может быть, вам следует использовать line.IndexOf вместо list.Find?

Короче говоря, вы, похоже, ищете символы в элементе управления List, а не в строке.

...