我正在尝试迭代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);
}
}
答案 0 :(得分:3)
不是将文本复制到字符串,而是可以通过Find()方法直接使用RichTextBox:
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);
}
答案 1 :(得分:2)
此行将始终选择相同的项目:
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;
}
}
答案 2 :(得分:0)
如果您想突出显示语法,我建议使用FastColoredTextBox控件: