C# 在 RichTextBox 中选择性地为文本着色
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/455713/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Selectively coloring text in RichTextBox
提问by Gold
How can I paint in red every time I meet the letter "A" in RichTextBox?
每次在 RichTextBox 中遇到字母“A”时,我如何才能画成红色?
采纳答案by Hans Passant
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);
}
回答by E.J. Brennan
This won't work while you are typing if that is what you are looking for, but I use this to highlight substrings:
如果这是您要查找的内容,则在您键入时这将不起作用,但我使用它来突出显示子字符串:
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 & "" & EndTag, RegexOptions.IgnoreCase)
End Function
and call it this way:
并这样称呼它:
Highlight("A", "Color All my A's red", [span class=highlight]', '[/span]')
Where the class 'highlight' has whatever color coding/formatting you want:
“highlight”类具有您想要的任何颜色编码/格式:
.highlight {text-decoration: none;color:black;background:red;}
BTW: you need to change those square brackets to angled ones...they wouldn't come thru when I typed them...
顺便说一句:您需要将那些方括号更改为有角度的方括号......当我输入它们时它们不会通过......
回答by Ray Booysen
This is the C# code for EJ Brennan's answer:
这是 EJ Brennan 回答的 C# 代码:
public string Highlight(object Search_Str, string InputTxt, string StartTag, string EndTag)
{
return Regex.Replace(InputTxt, "(" + Regex.Escape(Search_Str) + ")", StartTag + "" + EndTag, RegexOptions.IgnoreCase);
}
回答by Oliver
Here is a snippet out of my wrapper class to do this job:
这是我的包装类中的一个片段来完成这项工作:
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();
}
Now you can call it with AddMessage("The command failed")
to get it automatically highlight in red. Or you can call it with AddMessage("Just a special message", Color.Purple)
to define a special color (Helpful e.g. within catch blocks to define a specific color, regardless of the message content)
现在您可以调用它AddMessage("The command failed")
以使其自动以红色突出显示。或者您可以调用它AddMessage("Just a special message", Color.Purple)
来定义特殊颜色(有用,例如在 catch 块中定义特定颜色,无论消息内容如何)