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にある場合は、ExitForを削除する必要があります。また、私の答えでは、すでにコントロールにあるすべての文字列の不要な配列を作成する必要がないことにも注意してください。そして最後の注意として、文字列ツールの豊富なバッグがあるのに、なぜ古いスタイルのInstr(VB6)を使用するのですか?

于 2012-08-29T20:31:49.887 に答える
0

つまり、CodeProject.comサイトのFastColoredTextBoxを使用していると思いますよね?

最初に、テキストボックスのテキストを対応する行に分割してみてください。

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 に答える