Announcement

Collapse
No announcement yet.

WPF Markieren von bestimmten Wörtern nach dem Laden der Daten in die RichTextBox

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

  • WPF Markieren von bestimmten Wörtern nach dem Laden der Daten in die RichTextBox

    Hallo,

    Nun möchte ich noch während das Programm ausgeführt und wenn ein Button gedrückt wird, bestimmte Wörter in der RichTextBox farbig markiert werden(d.h. nicht Selected).

    Dazu habe ich folgenden Beispielcode gefunden, denn ich an meine Bedürfnisse anpassen will.

    Code von de.softuses.com

    Code:
           public bool DoSearch(RichTextBox richTextBox, string searchText, bool searchNext)
            {
                TextRange searchRange;
     
                // Get the range to search
                if (searchNext)
                    searchRange = new TextRange(richTextBox.Selection.Start.GetPositionAtOffset(1),
                                                richTextBox.Document.ContentEnd);
                else
                    searchRange = new TextRange(richTextBox.Document.ContentStart, 
                                                richTextBox.Document.ContentEnd);
    
                // Do the search
                TextRange foundRange = FindTextInRange(searchRange, searchText);
                if (foundRange == null)
                    return false;
    
                // Select the found range
                richTextBox.Selection.Select(foundRange.Start, foundRange.End);
    
                return true;
            }
    
            public TextRange FindTextInRange(TextRange searchRange, string searchText)
            {
                // Search the text with IndexOf
                int offset = searchRange.Text.IndexOf(searchText);
                if (offset < 0)
                    return null;  // Not found
    
                // Try to select the text as a contiguous range
                for (TextPointer start = searchRange.Start.GetPositionAtOffset(offset); 
                                 start != searchRange.End; 
                                 start = start.GetPositionAtOffset(1))
                {
                    TextRange result = new TextRange(start, start.GetPositionAtOffset(searchText.Length));
                    if (result.Text == searchText)
                        return result;
                }
                return null;
            }
    In diesem Code wird Text in eine textBox geschrieben und das Dokument, welches in der richTextBox steht wird durchsucht wenn man den Button klickt. Beim klicken werden diese 2 Methoden aufgerufen, welche die richTextBox nach dem searchstring durchsucht und das Wort auswählt falls es gefunden wurde.

    Ich habe mir nun 2 Wege ausgedacht.
    1.: ich erstelle mir ein FlowDocument, kopiere den kompletten Text aus der richtextBox dort rein, suche dort nach dem Text, markiere diesen farbig z.B. rot und übergebe das FlowDocument an die richtextBox.
    2.: ich suche nun nach dem Wort das ich markieren will, erstelle mir ein neues FlowDocument, lade meine gesuchtes Wort dort rein, markiere es farbig(z.b. roter hintergrund), lösche dann das Wort in der richtextbox und füg mein markiertes Wort an der selben Stelle wieder ein. Jetzt wär das Wort rot markiert bzw hinterlegt und ich wär glücklich

    Welche würdet ihr für besser finden, bzw. würde sich mit Hilfe des Beispielcodes besser lösen lassen?

    Und gibt es Beispiele dafür wie ich gezielt Text aus der RichTextBox lösche, bearbeite und wieder einfüge?

    Mfg
    Karl Reimann

  • #2
    http://r4r.co.in/c1/01/tutorial/csha...0C-Sharp.shtml

    das hab ich jetzt zum Thema gefunden, nur wie muss ich das umbauen das es in WPF funktioniert?

    Comment

    Working...
    X