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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 183319
Url: https://administrator.de/contentid/183319
Printed on: April 24, 2024 at 18:04 o'clock
2 Comments
Latest comment
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