[英]Issues changing color in richtextbox
我正在尝试遍历Richtextbox中的一些预键入文本,并根据其前缀将特定单词/行的颜色更改为一种颜色,到目前为止,不同的前缀是[b],[f]和[e] 。 在此示例中,我仅使用[b]。 我已经尝试过使用while / foreach循环,但是它们似乎并未遍历整个文本。 以下是我最近使它起作用的方法,但它仅适用于文本的第一行。 有人可以向我指出正确的方向吗?
private void AboutBox_Load(object sender, EventArgs e)
{
textBox1.Select(0, 0);
using (StringReader reader = new StringReader(richTextBox1.Text))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if ((line != null && line.Contains("[b]")))
{
richTextBox1.Select(richTextBox1.Text.IndexOf("[b]"), "[b]".Length);
richTextBox1.SelectionColor = Color.Green;
}
} while (line != null);
}
}
无需将文本复制到字符串,您可以通过RichTextBox的Find()方法直接使用它:
void AboutBox_Load(object sender, EventArgs e)
{
this.ColorPrefix(richTextBox1, "[b]", Color.Green);
this.ColorPrefix(richTextBox1, "[f]", Color.Red); // change the color!
this.ColorPrefix(richTextBox1, "[e]", Color.Yellow); // change the color!
}
private void ColorPrefix(RichTextBox rtb, string prefix, Color color)
{
int position = 0, index = 0;
while ((index = rtb.Find(prefix, position, RichTextBoxFinds.None)) >= 0)
{
rtb.Select(index, prefix.Length);
rtb.SelectionColor = color;
position = index + 1;
}
rtb.Select(rtb.TextLength, 0);
}
该行将始终选择相同的项目:
richTextBox1.Select(richTextBox1.Text.IndexOf("[b]"), "[b]".Length);
所以我建议这样的事情:
private void AboutBox_Load(object sender, EventArgs e)
{
string text = richTextBox1.Text;
int position = 0, index = 0;
while ((index = text.IndexOf("[b]", position)) >= 0)
{
richTextBox1.Select(index, 3);
richTextBox1.SelectionColor = Color.Green;
position = index + 1;
}
}
如果您想突出显示语法,建议您使用FastColoredTextBox控件:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.