RegEx Aktuelle Zeile Highlighten Problem

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von viperkill.

    RegEx Aktuelle Zeile Highlighten Problem

    Hallo,

    ich weiß, dass es zu diesem Thema schon zich Threads gibt aber die helfen mir nicht wirklich weiter.

    Ich habe folgendes Problem: Ich möchte ein Dokument Highlighten welches bearbeitet wird. Wenn man jedesmal wenn sich der Text ändert den kompletten Text nach allen wörtern(sind knapp 3000) durchsucht, die gehighlitet werden sollen, ist die Performance des Programms nicht grade gut. Deswegen soll mein Programm auch immer nur die Zeile highlighten, in der sich auch der Cursor befindet. Ich habe dafür diesen Code benutzt(Die Wörter die gehighlitet werden sollen, sind in der phpRTB) :

    VB.NET-Quellcode

    1. For Each line In phpRTB.Lines
    2. If Not line = "" Then
    3. Dim Reg_b As System.Text.RegularExpressions.MatchCollection
    4. Dim Match_b As System.Text.RegularExpressions.Match
    5. Dim pattern_b As String = "\s" & line.ToString & "\s"
    6. Dim currentline_b As Integer = Box.GetFirstCharIndexOfCurrentLine
    7. currentline_b += Box.Lines(Box.GetLineFromCharIndex(currentline_b)).Length
    8. Reg_b = Regex.Matches(LCase(Box.Text), LCase(pattern_b))
    9. For Each Match_b In Reg_b
    10. Box.Select(Match_b.Index, Match_b.Length)
    11. Box.SelectionColor = Color.Blue
    12. Box.Select(currentline_b, 0)
    13. Box.SelectionColor = Color.Black
    14. Next
    15. End If
    16. Next


    Highlighten funktioniert zwar auch, nur es wird immer noch der komplette Texte dursucht und die Performance leidet extrem(man kann kaum noch schreiben weil es so ruckelt).

    Weiß jemand was ich falsch mache ? Danke für eure Hilfe ;)


    Grüsse,

    viperkill
    Hi,

    Danke für deine Antwort... Ich werd das gleichmal ausprobieren und mein Ergebnis posten

    Grüsse,

    viperkill


    EDIT: Ich habe jetzt doch noch einen Thread gefunden der mir ein bischen geholfen hat. Ich habe jetzt diesen Code:

    VB.NET-Quellcode

    1. If Not line = "" Then
    2. Dim Reg_b As System.Text.RegularExpressions.MatchCollection
    3. Dim Match_b As System.Text.RegularExpressions.Match
    4. Dim pattern_b As String = "\s" & line.ToString & "\s"
    5. Dim pos = Box.GetFirstCharIndexOfCurrentLine
    6. Dim cuRLi = Box.GetLineFromCharIndex(pos)
    7. Dim LiLen = Box.Lines(cuRLi).Length
    8. Reg_b = Regex.Matches(LCase(Box.Text.Substring(pos, pos + LiLen)), LCase(pattern_b))
    9. For Each Match_b In Reg_b
    10. Box.Select(Match_b.Index + pos, Match_b.Length)
    11. Box.SelectionColor = Color.Blue
    12. Box.Refresh()
    13. Next
    14. End If
    15. Next


    Nur Immer wenn ich dann etwas in die RTB rein schreibe bekomme ich diesen Fehler :

    Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen. Parametername: length

    Weiß jemand was ich falsch mache ?

    Achja: Die beiden Werte Pos und liLen haben beide keinen Nullwert sondern z.b. 18 und 57.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „viperkill“ ()