Richtig ist meist nicht der direkte Vergleich mit Color.Transparent, sondern die Alpha-Komponente zu prüfen: vb If bmp.GetPixel(x, y).A <> 0 Then ' Pixel ist nicht transparent End If...
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))
Verwandte Fragen
Wirkt „Exit For“ in VB.NET 2003 bei geschachtelten Schleifen auf alle Schleifen oder nur auf die aktuelle?
Exit For beendet in VB.NET 2003 nur die aktuelle For-Schleife, nicht alle geschachtelten Schleifen. Wenn du aus mehreren Ebenen gleichzeitig raus willst, brauchst du zusätzliche Logik, z. B. ein...
Kann man in VB.NET 2003 vorübergehend alle Shortcuts deaktivieren und Tastenkombinationen wie Strg+A als String in eine TextBox einfügen?
Ja – aber nicht global für ganz Windows, sondern innerhalb deiner VB.NET-2003-Anwendung. Du musst die Tastenkombinationen selbst abfangen, Standard-Shortcuts unterdrücken und aus den g...
Wie lösche ich in VB.NET 2003 alle ausgewählten Einträge aus einer ListBox?
In VB.NET 2003 löschst du mehrere markierte ListBox-Einträge am sichersten rückwärts über SelectedIndices, weil sich die Indizes beim Entfernen sofort verschieben. vb Dim i A...
Bis zu welcher Version läuft VB.NET unter Windows XP?
Unter Windows XP läuft VB.NRT höchstens mit einer Version, die noch auf .NET Framework 4.0/4.0.3 basiert – neuere Builds mit höherem .NET-Unterbau laufen auf XP nicht mehr. Micros...
Kann man in VB.NET 2003 Bilder in DLLs speichern und im aktuellen Projekt anzeigen?
Ja – in VB.NET 2003 kannst du Bilder in einer DLL speichern und im aktuellen Projekt anzeigen. Der saubere Weg ist, die Bilder als eingebettete Ressourcen in die DLL aufzunehmen und sie zur Lauf...
Wie lassen sich in VB.NET 2003 Änderungen an einer Originaldatei automatisch in mehreren Projekten aktualisieren?
Ja – aber nicht zuverlässig über „Kopien“ derselben Datei. Der saubere Weg ist, den gemeinsamen Code in eine zentrale Stelle auszulagern; nur dann wirken Änderungen au...
Wie sortiere ich in VB.NET 2003 ein Array mit 4 Spalten und x Zeilen nach Zeilen?
In VB.NET 2003 kannst du ein „2D-Array“ (Dim a(x,3)) nicht direkt nach Zeilen sortieren. Praktisch musst du immer ganze Zeilen gegeneinander tauschen – also z. B. per BubbleSort oder...