在.net richtextbox中突出显示语法,我该如何处理换行符?

时间:2010-10-07 13:24:46

标签: .net richtextbox syntax-highlighting

我试图强调richtextcontrol中的一些语法(引用文本,XML标记,XML注释)。除了由我自己的愚蠢创造的明显问题(例如,通过文本突然显示语法需要花费一秒钟而且我无法在输入字符时检查语法)我也遇到了由换行引起的问题文本。

这是我对syntaxhighlight的微弱尝试:

    While i < l

        ssRelevantText = t.Text.Substring(i)

        ssSelectedText = Regex.Match(ssRelevantText, pattern, RegexOptions.Singleline).Value
        idxSelectionStart = t.Find(ssSelectedText, i, RichTextBoxFinds.None)
        idxSelectionLength = ssSelectedText.Length
        t.SelectionStart = idxSelectionStart
        t.SelectionLength = idxSelectionLength
        t.SelectionColor = color

        i = idxSelectionStart + idxSelectionLength
        t.SelectionStart = idxCursorBeforeSelection
        t.SelectionLength = 0
        t.SelectionColor = color.Black

    End While

(我删除了评论,因为具有讽刺意味的是,VB评论打破了SO的语法突出显示。)

我也尝试过其他RegexOptions,但问题仍然存在,例如

“你好”

找到

并准确着色,

您好

找不到

。 (在这种事件发生之后,着色也失败了,但并非总是如此。)

如果我用其他符号替换所有换行符,则上述工作正常并突出显示所有内容。新行为什么会干扰?

或者,如何在richtextbox中进行语法突出显示?我能找到的所有例子都是指保留字的语法高亮,而不是基于模式的术语。

编辑:我到目前为止已经发现RichTextBox方法Find()找不到包含换行符的字符串。由于这会触发异常(容易避免),之后不再进行进一步的突出显示。如何在RichTextBox中找到包含换行符的字符串?

1 个答案:

答案 0 :(得分:0)

您可能需要查看此处:http://blogs.microsoft.co.il/blogs/tamir/archive/2006/12/14/RichTextBox-syntax-highlighting.aspx

它提供了一个很好的例子,说明如何使用RichTextBox在C#中语法higlight。