изменить цвет текста от определенного символа до конца строки richTextBox - PullRequest
0 голосов
/ 08 ноября 2018

В моей Winform пользователь выбирает переключатель. На основании этого переключателя он читает определенные строки из текстового файла. Затем я хочу, чтобы он искал апостроф, как только он найдет апостроф, я хочу, чтобы весь текст в строке после апострофа был зеленым (текст является реальным кодом, поэтому он должен окрашивать текст так же, как если бы он был были прокомментированы в компиляторе).

Вопрос: Как определить длину текста в строке после апострофа?

Вот мой код ...

    Dim indexx As Integer = 0
    Dim numOfChars As Integer

    While indexx < RichTxtOut.Text.LastIndexOf("'")
        numOfChars = 0

        'This finds the char index of the first instance of what I am looking for. 
        Dim FoundCharIndex As Integer = RichTxtOut.Find("'", indexx, RichTxtOut.TextLength, RichTextBoxFinds.None)
        'this finds the line the found char resides in 
        Dim LineOfFoundChar As Integer = RichTxtOut.GetLineFromCharIndex(FoundCharIndex)

        Dim startCounting As Boolean = False

        'count the number of characters after the apostrophe
        For li As Integer = 0 To RichTxtOut.Lines(LineOfFoundChar).Count - 1
            If RichTxtOut.Lines(LineOfFoundChar).Chars(li) = "'" Then
                startCounting = True
            End If
            If startCounting Then numOfChars += 1

        Next

        RichTxtOut.Select(FoundCharIndex, numOfChars)

        RichTxtOut.SelectionColor = Color.Green
        numOfChars = 0
        indexx = RichTxtOut.Text.IndexOf("'", indexx) + 1

    End While

1 Ответ

0 голосов
/ 08 ноября 2018

Я разобрался с проблемой. RichTxtOut.GetLineFromCharIndex () считает строку, переполненную на 2 строки, как 1 строку. Следовательно, чем больше строк переполняется, тем более некорректными они становятся.
Этот код на самом деле работает, мне нужно было изменить способ чтения строк в RichTextBox

For li As Integer = Eachline + 1 To lines.Count - 1

    If lines(li) = Nothing Then

    ElseIf lines(li).Chars(0) = "|" Then
        Exit For
    Else
        For lineChar As Integer = 0 To lines(li).Count - 1
            RichTxtOut.Text &= lines(li).Chars(lineChar)

            If lineChar = 90 Then
                RichTxtOut.Text &= vbNewLine & "        →    "
            ElseIf lineChar = 167 Then
                RichTxtOut.Text &= vbNewLine & "        →    "
            End If
        Next
    End If

    RichTxtOut.Text &= vbNewLine

Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...