Ja: Diese Einträge heißen in VB.NET 2003 beim MainMenu in der Praxis meist Top-Level-Menüpunkte oder Hauptmenüs; technisch sind es MenuItem-Objekte. Wenn du also „Datei&ldq...
Wie markiert man in VB.NET 2003 in einer RichTextBox alle Vorkommen einer Zeichenkette?
Antwort vom**In einer `RichTextBox` markierst du alle Vorkommen, indem du mit `Find` ab einer Startposition wiederholt suchst und jeden Treffer per `Select` + `SelectionBackColor` hervorhebst; eine eingebaute „Alle markieren“-Funktion gibt es dafür nicht.** ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.richtextbox.find?view=windowsdesktop-10.0)) ## So funktioniert es in VB.NET 2003 `RichTextBox.Find` liefert immer nur den **nächsten** Treffer zurück. Deshalb musst du in einer Schleife weitersuchen, bis `Find` einen negativen Wert zurückgibt. Die Markierung selbst erfolgt über die aktuelle Auswahl der RichTextBox. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.richtextbox.find?view=windowsdesktop-10.0)) ```vb Private Sub MarkiereAlleVorkommen(ByVal suchtext As String) Dim pos As Integer = 0 Dim treffer As Integer If suchtext = "" Then Exit Sub ' Alte Markierungen entfernen RichTextBox1.SelectAll() RichTextBox1.SelectionBackColor = RichTextBox1.BackColor Do treffer = RichTextBox1.Find(suchtext, pos, RichTextBoxFinds.None) If treffer < 0 Then Exit Do RichTextBox1.Select(treffer, suchtext.Length) RichTextBox1.SelectionBackColor = Color.Yellow pos = treffer + suchtext.Length Loop End Sub ``` ## Wichtiger Unterschied Wenn du `pos = treffer + 1` verwendest, findest du auch **überlappende Treffer**. Mit `pos = treffer + suchtext.Length` findest du nur normale, nicht überlappende Vorkommen. Beispiel: Suche nach `ana` in `banana` - mit `+ suchtext.Length`: 1 Treffer - mit `+ 1`: 2 Treffer ## Praktisch wichtig bei VB.NET 2003 Die typische Schwäche vieler Beispiele ist, dass sie am Ende den Cursor an die letzte Fundstelle setzen und damit die Benutzerposition zerstören. Besser ist: `SelectionStart` und `SelectionLength` vorher sichern und nach dem Markieren wiederherstellen. Das macht die Funktion im echten Editor deutlich sauberer. Diese Arbeitsweise folgt direkt daraus, dass Formatierung in der RichTextBox immer über die aktuelle Selektion läuft. ([codeproject.com](https://www.codeproject.com/Articles/4031/Background-Highlighting-with-the-RichTextBox-the-S)) ```vb Private Sub MarkiereAlleVorkommen(ByVal suchtext As String) Dim alteStart As Integer = RichTextBox1.SelectionStart Dim alteLaenge As Integer = RichTextBox1.SelectionLength Dim pos As Integer = 0 Dim treffer As Integer If suchtext = "" Then Exit Sub RichTextBox1.SelectAll() RichTextBox1.SelectionBackColor = RichTextBox1.BackColor Do treffer = RichTextBox1.Find(suchtext, pos, RichTextBoxFinds.None) If treffer < 0 Then Exit Do RichTextBox1.Select(treffer, suchtext.Length) RichTextBox1.SelectionBackColor = Color.Yellow pos = treffer + suchtext.Length Loop RichTextBox1.Select(alteStart, alteLaenge) End Sub ``` ## Falls du nur ganze Wörter markieren willst Dann suchst du mit `RichTextBoxFinds.WholeWord` statt `RichTextBoxFinds.None`. Die `Find`-Methode unterstützt solche Suchoptionen direkt. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.richtextbox.find?view=windowsdesktop-10.0))