Announcement

Collapse
No announcement yet.

RichTextBox.Find()

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RichTextBox.Find()

    Hay!

    Da das mein erster Beitrag ist, freue ich mich mal, hier mitdabei zu sein.

    Ich mag es mit VB.Net zu programmieren und möchte es intensiv lernen.

    Nunja, ich habe eine RichTextBox (deklariert als RTB), in dieser ist ein Text.

    Nun soll er alle Wörter finden (z.B "hallo") und diese dann Färben, also:

    Code:
    Dim RTB As RichTextBox = RichTextBox1
    Dim hallo As String = "hallo"
    Dim myfont As New Font("Arial", 10, FontStyle.Bold)
    RTB.SelectionStart = RTB.Find(hallo)
    For Each hallo As String In RTB.Text
    RTB.SelectionFont = myfont
    Next
    Mein Problem ist, dass er nur ein "hallo" fett macht, die restlichen "hallo"s lässt er normal und mit 'nem Integer-Aufruf bleibt es auch so.

    Wie kann ich das Problem lösen?

    Mit freundlichen Grüßen
    String08 aka Nico

  • #2
    Hallo,

    mit nachfolgender Methode klappt es. In den Kommentaren auch der Grund warum's bei dir nicht ging.

    Code:
    # ''' <summary>
    # ''' Markiert den übergebenen Text in der RichTextbox
    # ''' </summary>
    # ''' <param name="richTextBox">RichTextBox</param>
    # ''' <param name="text">Text der zu markieren ist</param>
    # Private Sub Mark(ByVal richTextBox As RichTextBox, ByVal text As String)
    #     ' Nur wenn ein Text vorhanden ist:
    #     If richTextBox1.Text.Length = 0 Then
    #         Return
    #     End If
    #    
    #     ' Schrift wählen:
    #     Dim font As New Font("Arial", 10, FontStyle.Bold)
    #     Dim color As Color = Color.Red
    #    
    #     ' Find liefert immer das erste Auftreten einer Zeichenfolge.
    #     ' Deshalb muss der gesamte Text in einer Schleife durchlaufen
    #     ' werden. Die Startposition wird bei jedem Schleifendurchlauf
    #     ' um die Länge des zu suchenden Textes erhöht.
    #     ' Die Schleife wird beendet wenn nichts mehr gefunden wird, d.h.
    #     ' die Find-Methode gibt -1 zurück:
    #     Dim startPos As Integer = 0
    #     Do
    #         ' Position des Textes finden:
    #         startPos = richTextBox.Find(text, startPos + text.Length, RichTextBoxFinds.WholeWord)
    #        
    #         richTextBox.SelectionColor = color
    #         richTextBox.SelectionFont = font
    #     Loop While startPos <> -1
    # End Sub
    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke, es funktioniert!

      Und danke, dass du den Grund getippt hast, bin nicht so erfahren in VB.Net, erst 13 Jahre alt, macht mir Spaß und so...

      Mit freundlichen Grüßen
      String08 aka Nico

      Comment


      • #4
        Hi,

        wenn du noch jung und unerfahren bist in VB.net dann schlage ich dir vor dass du C# anstatt VB.net lernst.

        C# ist die Sprache die speziell für das .net-Framework entwickelt worden ist. Meiner Meinung nach (rein subjektiv) ist das Programmieren in C# leichter als in VB.net. Bevor ich C# lernte hatte ich mit C nichts zu tun, mit VB schon. Dennoch fiel es mir leichter C# zu lernen als VB.net.

        Mit der Entwicklungumgebung SharpDevelop kann auch von VB.net zu C# konvertiert werden und vice versa.

        Das obige Beispiel sieht mit C# dann so aus:
        Code:
        /// <summary>
        /// Markiert den übergebenen Text in der RichTextbox
        /// </summary>
        /// <param name="richTextBox">RichTextBox</param>
        /// <param name="text">Text der zu markieren ist</param>
        private void Mark(RichTextBox richTextBox, string text)
        {
        	// Nur wenn ein Text vorhanden ist:
        	if (richTextBox1.Text.Length == 0) return;
        
        	// Schrift wählen:
        	Font font = new Font("Arial", 10, FontStyle.Bold);
        	Color color = Color.Red;
        
        	// Find liefert immer das erste Auftreten einer Zeichenfolge.
        	// Deshalb muss der gesamte Text in einer Schleife durchlaufen
        	// werden. Die Startposition wird bei jedem Schleifendurchlauf
        	// um die Länge des zu suchenden Textes erhöht.
        	// Die Schleife wird beendet wenn nichts mehr gefunden wird, d.h.
        	// die Find-Methode gibt -1 zurück:
        	int startPos = 0;
        	do
        	{
        		// Position des Textes finden:
        		startPos = richTextBox.Find(
        			text,
        			startPos + text.Length,
        			RichTextBoxFinds.WholeWord);
        
        		richTextBox.SelectionColor = color;
        		richTextBox.SelectionFont = font;
        	} while (startPos != -1);
        }
        Grundsätzlich ist/sollte es egal sein mit welcher Sprache .net-Anwendungen erstellt werden, denn alle kompilieren in die Intermidiate Language.
        Die Wahl der Sprache ist also Geschmackssache.

        Werden im Framework Neuerungen eingebaut (wie zB letztens LINQ) so sind diese aber zuerst mit C# verfügbar - sicherlich ein Vorteil.

        mfG Gü
        Zuletzt editiert von gfoidl; 15.09.2008, 20:09. Reason: Ergänzung
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X