【问题标题】:VB.NET: Syntax HighlightVB.NET:语法亮点
【发布时间】:2010-06-25 20:36:55
【问题描述】:

我开始学习 VB.NET,我正在尝试做一个语法高亮。当我设置所选文本的颜色时会出现问题。它改变了整个富文本框的内容。

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

【问题讨论】:

    标签: vb.net richtextbox syntax-highlighting


    【解决方案1】:

    你很接近。不要忘记恢复 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...),谢谢你让我不那么困惑:)
    【解决方案2】:

    好吧,尝试重命名变量,看看是否有帮助

    For Each key As KeyWord In keywords
    

    【讨论】:

      【解决方案3】:

      这是一个非常糟糕的方法,如果您想突出显示语法,请查看 Scintilla API 或附加组件。它是免费的,并附带 600 个工具来制作您自己的代码编辑器或预 IDE。

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 1970-01-01
        • 2010-10-29
        • 2010-12-27
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多