単語を見つけて、正規表現を使用してそれらを置き換えようとしています。スタックオーバーフローの例外が発生し続けます。再帰ループが原因であると考えています。そこで、コードの最初のブロックからforループを削除しようとしましたが、コードの2番目のブロックを思い付きましたが、それでも同じ問題が発生しました。
大文字と小文字を区別せずに特定の文字列を見つけて、同じ文字列の正しい大文字と小文字に自動的に置き換えようとしています。したがって、例として、誰かが「vB」と入力すると、自動的に「vb」に置き換えられます。私の問題はtextchangedイベントに参加していることに起因していることを知っているので、誰かが私を正しい方向に導くことができれば、私は非常に感謝します。
Private Sub tb_textchanged(ByVal sender As System.Object, ByVal e As TextChangedEventArgs)
Dim pattern As String = "\<vb\>"
Dim input As String = txt.Text
For Each m As Match In Regex.Matches(input, pattern, RegexOptions.IgnoreCase)
Dim caretpos As FastColoredTextBoxNS.Place = New Place(txt.Selection.Start.iChar, txt.Selection.Start.iLine)
Dim replacement As String = "<vb>"
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement, RegexOptions.IgnoreCase)
txt.Text = result
txt.Selection.Start = New Place(caretpos.iChar, caretpos.iLine)
Next
End Sub
Forループを置き換えた後。
Private Sub tb_textchanged(ByVal sender As System.Object, ByVal e As TextChangedEventArgs)
Dim pattern As String = "\<vb\>"
Dim input As String = txt.Text
Dim matches As MatchCollection = Regex.Matches(input, pattern, RegexOptions.IgnoreCase)
If matches.Count > 0 Then
Dim caretpos As FastColoredTextBoxNS.Place = New Place(txt.Selection.Start.iChar, txt.Selection.Start.iLine)
Dim replacement As String = "<vb>"
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement, RegexOptions.IgnoreCase)
txt.Text = result
txt.Selection.Start = New Place(caretpos.iChar, caretpos.iLine)
End If
End Sub