VB.NET:语法高亮

3

我开始学习VB.NET,尝试进行语法高亮。当我设置选定文本的颜色时,问题就出现了。它会改变整个richtextbox的内容。

Private Sub txtText_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbText.TextChanged
    Dim keywords As ArrayList
    Dim index As Integer
    Dim keyboardCursorPosition As Integer

    keywords = New ArrayList()

    keywords.Add(New Keyword("<?php", Color.Red))
    keywords.Add(New Keyword("echo", Color.Blue))
    keywords.Add(New Keyword("?>", Color.Red))

    keyboardCursorPosition = rtbText.SelectionStart

    For Each keyword As Keyword In keywords
        index = rtbText.Text.IndexOf(keyword.getKey())

        If index <> -1 Then
            rtbText.Select(index, keyword.getKey().Length)
            rtbText.SelectionColor = keyword.getColor()

            rtbText.DeselectAll()
            rtbText.SelectionStart = keyboardCursorPosition
        End If

    Next
End Sub
3个回答

2
你做得很好。不要忘记恢复SelectionColor:
    Dim prevColor As Color = rtbText.SelectionColor
    For Each keyword As KeyWord In keywords
        '' etc...
    Next
    rtbText.SelectionColor = prevColor

顺便说一下:保持你的代码整洁。一个rtb的消息处理器不应该被命名为txtXxxx。这些小细节迟早会让你遇到麻烦(对我来说是这样,因为我找错了原因)。同时,将关键字初始化移出方法。


啊,我一开始也认为是这样,但在发布回答之前我决定先试一下,结果不知道为什么它不起作用(可能是因为我把 rtbText.SelectionColor = prevColor 放在了 DeselectAll 之后...),谢谢你让我感到少些困惑 :) - Hans Olsson

0

嗯,试着重命名变量,看看是否有帮助

For Each key As KeyWord In keywords

0

这是一种非常糟糕的方式,如果你想要语法高亮,那么可以看看Scintilla API或插件。它是免费的,并带有600个工具,可以制作自己的代码编辑器或预先集成开发环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接