在richtextbox中突出显示“#”直到行尾

时间:2011-11-01 00:56:56

标签: c# .net winforms richtextbox

我的RIchTextBox中有以下文字:

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

我希望在#之后和" "之前突出显示所有内容(espace)

我是怎么做到的?我尝试将end设为\t" "的IndexOf,但返回-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;
                }
          }

listRichTextBox

3 个答案:

答案 0 :(得分:3)

使用GetLineFromCharIndex()获取Find()方法返回值的行号。然后GetFirstCharIndexFromLine(第+行)来知道下一行的起始位置。这为您提供了突出显示文本所需的SelectionStart和SelectionLength值。

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:1)

也许您应该使用line.IndexOf代替list.Find

简而言之,您似乎在List控件中搜索字符,而不是在字符串行中搜索。