Чтение строк в текстовом поле индивидуально

Я пытаюсь прочитать каждую строку в текстовом поле в отдельности и проверить, содержит ли она определенную строку. Это будет использоваться в событии textaged в текстовом поле для проверки определенной строки и будет выполнять соответствующий код, если найден.

Я не могу заставить это работать правильно все же. Вот мой код

    Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
        For Each line As Line In txt.Lines
            If CBool(InStr(line.ToString(), "<vb>")) Then
                txt.Language = Language.VB
            End If

3 ответа

Решение

Я предполагаю, что вы используете FastColoredTextBox с сайта CodeProject.com, верно?

Попробуйте сначала разбить текст в текстовом поле на соответствующие строки:

Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
Dim Lines as string() = txt.Text.Split(VbCrLf)
For Each line As String In txt.Lines
  CBool(InStr(line, "<vb>")) Then
  txt.Language = Language.VB
End If

FastColoredTextBox.Lines представляет собой список (из строки), поэтому вы можете просто зациклить строки таким образом

Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox) 
For Each line As String In txt.Lines 
   If line.IndexOf("<vb>", StringComparison.OrdinalIgnoreCase) > 0 Then 
      txt.Language = Language.VB 
      Exit For ' If this is all you have to do exit immediatly
   End If 
Next

РЕДАКТИРОВАТЬ: Выход для позволяет разорвать цикл без поиска в последующих строках, которые не представляют интереса. Конечно, если у вас есть другие if тогда выход для должен быть удален. Также обратите внимание, что в моем ответе вам не нужно создавать ненужный массив всех строк, уже находящихся в элементе управления. И последнее замечание: зачем использовать старый стиль Instr (VB6), если теперь у нас есть множество инструментов для струнных инструментов?

Почему вы проделали такой долгий путь, я сделал это сейчас с помощью следующего короткого простого кода:

For i = 0 To Val(TextBox1.Lines.Count)-1
    If TextBox1.Lines(i).ToString.StartsWith("OS Version:") Then
        Label9.Text = TextBox1.Lines(i).ToString
        Exit For
      Exit Sub
    End If
Next
Другие вопросы по тегам