VB.NET 2010, Richtextbox während Eingabe formatieren
Ich will mir im VB.Net 2010 eine Richtextbox so einrichten, dass schon während der Eingabe bestimmte Wörter hervorgehoben werden, z.B. die Schriftfarbe. Ich bekomme das auch hin, über "TextChanged" und "SelectionColor". Der Faulheit halber lasse ich aber jedesmal den gesamten Inhalt prüfen und formatieren. Die erwartete Textmenge ist so groß nicht sodass das flott geht, auch wenn der Text mal ein paar Zeilen scrollen muss. Aber genau da hakt es. Jedesmal flimmert die Box, weil er jedesmal den Text nach unten durchscrollt und dann wieder an die Eingabestelle zurück springt.
Ich suche jetzt nach einem Weg, ihn davon abzuhalten, beim Durchlaufen des Texts jedesmal die Boax zu scrollen.
Ein einfaches Formular mit einer Richtextbox namens "rtb".
Das geht doch sicher viel eleganter, oder?
Ich suche jetzt nach einem Weg, ihn davon abzuhalten, beim Durchlaufen des Texts jedesmal die Boax zu scrollen.
Ein einfaches Formular mit einer Richtextbox namens "rtb".
Private Sub rtb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtb.TextChanged
Try
'Merken der aktuellen Cursor-Position
Dim CursorPosition As Long = rtb.SelectionStart
'Die hervorzuhebende Phrase
Dim Phrase = "Hallo"
'Die aktuelle Suchposition
Dim p As Int32 = 0 - Phrase.Length
Do
'Das nächste Vorkommen der Phrase suchen
p = rtb.Text.IndexOf(Phrase, p + Phrase.Length)
If p >= 0 Then
rtb.SelectionStart = p
rtb.SelectionLength = Phrase.Length
rtb.SelectionColor = Color.Red
'Application.DoEvents()
End If
Loop While p >= 0
rtb.SelectionStart = CursorPosition
rtb.SelectionLength = 0
Catch ex As Exception
'ignoriert
End Try
End Sub
Das geht doch sicher viel eleganter, oder?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183319
Url: https://administrator.de/forum/vb-net-2010-richtextbox-waehrend-eingabe-formatieren-183319.html
Ausgedruckt am: 08.04.2025 um 23:04 Uhr
2 Kommentare
Neuester Kommentar
Hi !
Nur eine blöde Idee aus dem Stand heraus und besonders elegant ist die leider auch nicht aber probier doch mal wie es aussieht, wenn Du den gesamten Text in eine zweite Box schiebst (die nur im Speicher existiert bzw. unsichtbar ist), ihn dort formatierst und dann wieder in die erste Box zurückschreibst. Natürlich musst Du während die Formatiervorgang läuft, die sichtbare Box vor Änderungen schützen und den Schutz danach wieder aufheben, am besten mit dem Ende des Try Blocks.
mrtux
Nur eine blöde Idee aus dem Stand heraus und besonders elegant ist die leider auch nicht aber probier doch mal wie es aussieht, wenn Du den gesamten Text in eine zweite Box schiebst (die nur im Speicher existiert bzw. unsichtbar ist), ihn dort formatierst und dann wieder in die erste Box zurückschreibst. Natürlich musst Du während die Formatiervorgang läuft, die sichtbare Box vor Änderungen schützen und den Schutz danach wieder aufheben, am besten mit dem Ende des Try Blocks.
mrtux