0

我正在尝试单独读取文本框中的每一行并检查它是否包含某个字符串。这将在文本框的 textchanged 事件中用于检查某个字符串,如果找到,它将执行相应的代码。

我不能让它正常工作。这是我的代码。

    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
4

3 回答 3

1

FastColoredTextBox.Lines 是一个 List(Of String) 所以你可以简单地以这种方式在 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

编辑:Exit For 允许在不搜索后续不感兴趣的行的情况下中断循环。当然,如果您还有其他if的,则应删除 Exit For。另请注意,在我的回答中,您不必创建控件中已有的所有字符串的不必要数组。最后一点,既然我们拥有丰富的字符串工具包,为什么还要使用旧式 Instr (VB6)

于 2012-08-29T20:31:49.887 回答
0

所以我猜你正在使用 CodeProject.com 网站上的 FastColoredTextBox,对吧?

首先尝试将文本框的 Text 拆分为相应的行:

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
于 2012-08-29T20:28:10.807 回答
0

为什么你要走那么长的路,我现在用以下简短的简单代码做到了:

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
于 2014-06-28T16:34:00.857 回答