C# 突出显示'#';直到行在richtextbox中结束

C# 突出显示'#';直到行在richtextbox中结束,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,我的RIchTextBox中有以下文本: foo:baa#done baa a:b#pending ee 我想突出显示#之后和之前的所有内容(espace) 我是怎么做到的?我尝试将结束设为\t或“的索引,但它返回-1 我的代码(未按预期工作): string[]line=list.line; 弦线; 对于(int i=0,max=lines.Length;i

我的RIchTextBox中有以下文本:

foo:baa#done baa
a:b#pending  ee
我想突出显示
#
之后和
之前的所有内容(espace)

我是怎么做到的?我尝试将
结束
设为
\t
的索引,但它返回-1

我的代码(未按预期工作):

string[]line=list.line;
弦线;
对于(int i=0,max=lines.Length;i

list
是一个
RichTextBox

也许您应该使用
line.IndexOf
而不是
list.Find


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

也许您应该使用
line.IndexOf
而不是
List.Find

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

使用GetLineFromCharIndex()获取Find()方法返回值的行号。然后获取FirstCharindexFromline(第+1行)以知道下一行从何处开始。这将为您提供高亮显示文本所需的SelectionStart和SelectionLength值。

使用GetLineFromCharIndex()获取Find()方法返回值的行号。然后获取FirstCharindexFromline(第+1行)以知道下一行从何处开始。这将为您提供高亮显示文本所需的SelectionStart和SelectionLength值。

尝试以下操作:

        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;
            }
        }
string[]line=list.line;
弦线;
int len=0;
对于(int i=0,max=lines.Length;i
试试这个:

        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;
            }
        }
string[]line=list.line;
弦线;
int len=0;
对于(int i=0,max=lines.Length;i
谢谢。。我有一个问题:代码没有选择最后一行。怎么修?@TheMask你的最后一行怎么样?请发你的短信。a:1344#x@TheMask我试过了,它成功了。我想知道你的机器为什么没有改变。我们的代码相同吗?如何替换RichTextBox中特定行的字符串?谢谢。。我有一个问题:代码没有选择最后一行。怎么修?@TheMask你的最后一行怎么样?请发你的短信。a:1344#x@TheMask我试过了,它成功了。我想知道你的机器为什么没有改变。我们的代码相同吗?如何替换RichTextBox中特定行的字符串?