Wie kann ich jedes Mal in rot malen, wenn ich den Buchstaben "A" in RichTextBox treffe?Selektiv färben Text in RichTextBox
Antwort
Try this:
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);
}
Das wird nicht funktionieren, während Sie tippen, wenn das ist, was Sie suchen, aber ich benutze diesen Teil markieren:
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
und es auf diese Weise nennen:
Highlight("A", "Color All my A's red", [span class=highlight]', '[/span]')
Wenn die Klasse "Hervorhebung" irgendeine Farbcodierung/-formatierung hat, die Sie wollen:
BTW: Sie müssen th ändern ose eckigen Klammern abgewinkelte diejenigen ... würden sie durch nicht kommen, wenn ich sie getippt ...
danke für die Hilfe, aber haben Sie C# -Code? – Gold
Dies ist der C# Code für EJ Brennan Antwort:
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);
}
Hier ist ein Ausschnitt aus meiner Wrapper-Klasse um diesen Job zu tun:
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();
}
Jetzt können Sie es mit AddMessage("The command failed")
anrufen, um es automatisch in rot hervorzuheben. Oder Sie können es mit AddMessage("Just a special message", Color.Purple)
anrufen, um eine spezielle Farbe zu definieren (hilfreich zB in catch-Blöcken, um eine bestimmte Farbe zu definieren, unabhängig vom Inhalt der Nachricht)
Danke Oliver, dein Code hat mir geholfen! – Maro
Mögliche Duplikate von [Verschiedene Teile einer RichTextBox-Zeichenkette färben] (https: // stackoverflow.com/questions/1926264/color-different-parts-of-richtextbox-string) –