VB.NET: подсветка синтаксиса - PullRequest
3 голосов
/ 26 июня 2010

Я начал изучать 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 голосов
/ 26 июня 2010

Вы довольно близко.Не забудьте восстановить SelectionColor:

    Dim prevColor As Color = rtbText.SelectionColor
    For Each keyword As KeyWord In keywords
        '' etc...
    Next
    rtbText.SelectionColor = prevColor

Кстати: сохраняйте код чистымОбработчик сообщений для rtb не должен называться txtXxxx.Эти маленькие детали рано или поздно приведут вас в замешательство (мне это пришлось искать по неправильной причине).Также уберите инициализацию ключевого слова из метода.

0 голосов
/ 09 января 2015

Это очень плохой способ, если вы хотите выделить синтаксис, тогда посмотрите на Scintilla API или дополнение. Это бесплатно и поставляется с 600 инструментами для создания собственного редактора кода или предварительной IDE.

0 голосов
/ 26 июня 2010

Хорошо, попробуйте переименовать переменную и посмотрите, поможет ли она

For Each key As KeyWord In keywords
...