Colorare in modo selettivo il testo in RichTextBox

Come posso dipingere in rosso ogni volta che incontro la lettera “A” in RichTextBox?

Prova questo:

static void HighlightPhrase(RichTextBox box, string phrase, Color color) { int pos = box.SelectionStart; string s = box.Text; for (int ix = 0; ; ) { int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase); if (jx < 0) break; box.SelectionStart = jx; box.SelectionLength = phrase.Length; box.SelectionColor = color; ix = jx + 1; } box.SelectionStart = pos; box.SelectionLength = 0; } 

...

 private void button1_Click(object sender, EventArgs e) { richTextBox1.Text = "Aardvarks are strange animals"; HighlightPhrase(richTextBox1, "a", Color.Red); } 

Ecco uno snippet della mia class wrapper per fare questo lavoro:

  private delegate void AddMessageCallback(string message, Color color); public void AddMessage(string message) { Color color = Color.Empty; string searchedString = message.ToLowerInvariant(); if (searchedString.Contains("failed") || searchedString.Contains("error") || searchedString.Contains("warning")) { color = Color.Red; } else if (searchedString.Contains("success")) { color = Color.Green; } AddMessage(message, color); } public void AddMessage(string message, Color color) { if (_richTextBox.InvokeRequired) { AddMessageCallback cb = new AddMessageCallback(AddMessageInternal); _richTextBox.BeginInvoke(cb, message, color); } else { AddMessageInternal(message, color); } } private void AddMessageInternal(string message, Color color) { string formattedMessage = String.Format("{0:G} {1}{2}", DateTime.Now, message, Environment.NewLine); if (color != Color.Empty) { _richTextBox.SelectionColor = color; } _richTextBox.SelectedText = formattedMessage; _richTextBox.SelectionStart = _richTextBox.Text.Length; _richTextBox.ScrollToCaret(); } 

Ora puoi chiamarlo con AddMessage("The command failed") per farlo evidenziare automaticamente in rosso. Oppure puoi chiamarlo con AddMessage("Just a special message", Color.Purple) per definire un colore speciale (utile ad es. All’interno dei blocchi catch per definire un colore specifico, indipendentemente dal contenuto del messaggio)

Questo non funzionerà mentre stai scrivendo se è quello che stai cercando, ma lo uso per evidenziare sottostringhe:

 Function Highlight(ByVal Search_Str As Object, ByVal InputTxt As String, ByVal StartTag As String, ByVal EndTag As String) As String Highlight = Regex.Replace(InputTxt, "(" & Regex.Escape(Search_Str) & ")", StartTag & "$1" & EndTag, RegexOptions.IgnoreCase) End Function 

e chiamalo in questo modo:

 Evidenzia ("A", "Colore Tutti i miei A's rossi", [span class = highlight] "," [/ span] ")

Dove il ‘highlight’ della class ha qualsiasi codifica / formattazione dei colors che vuoi:

 .highlight {text-decoration: none; colore: black; background: red;}

BTW: devi cambiare quelle parentesi quadre a quelle ad angolo … non verrebbero da nessuna parte quando le ho scritte …

Questo è il codice C # per la risposta di EJ Brennan:

 public string Highlight(object Search_Str, string InputTxt, string StartTag, string EndTag) { return Regex.Replace(InputTxt, "(" + Regex.Escape(Search_Str) + ")", StartTag + "$1" + EndTag, RegexOptions.IgnoreCase); }