我有一个应该输出彩色文本 RichTextBox 的函数。所有匹配项都应为红色,不匹配的文本应为黑色。以下函数尝试在插入我的条目时更改 RichTextBox 内容颜色(如在为 RichTextBox 字符串的不同部分着色)
public void OutputColoredMatches(String InputText, MatchCollection Matches, RichTextBox OutputBox)
{
int LastMatchEndIndex = OutputBox.TextLength;
foreach (Match CurrentMatch in Matches)
{
OutputBox.SelectionColor = Color.Black;
OutputBox.AppendText(InputText.Substring(LastMatchEndIndex, CurrentMatch.Index - LastMatchEndIndex));
OutputBox.SelectionColor = Color.Red;
OutputBox.AppendText(InputText.Substring(CurrentMatch.Index, CurrentMatch.Length));
LastMatchEndIndex = CurrentMatch.Index + CurrentMatch.Length;
}
OutputBox.SelectionColor = Color.Black;
OutputBox.Text += InputText.Substring(LastMatchEndIndex, InputText.Length - LastMatchEndIndex);
}
该函数将选择颜色设置为黑色后才添加应该为黑色的文本,将选择颜色设置为红色后才添加找到的匹配文本。尽管单步执行代码并看到它正确插入文本,但所有输出都是黑色的。
我还尝试更改以插入所有(或部分)文本,然后更改 RichTextBox 选择的大小。然后设置选择颜色,这也不起作用。尽管我检查并仔细检查了选择在适当的位置开始和结束,但所有文本最后都是红色或黑色。(我尝试了类似的方法:在 RichTextBox 中选择性地为文本着色)。这是该功能的另一种变体,我插入部分文本,然后更改其颜色。我还在调试器中逐步执行了此操作,并验证它正在按照我的预期选择项目,然后设置它们的颜色,所有输出都是黑色的:
public void OutputColoredMatches(String InputText, MatchCollection Matches, RichTextBox OutputBox)
{
int SelPos = 0;
int LastMatchEndIndex = OutputBox.TextLength;
foreach (Match CurrentMatch in Matches)
{
SelPos = OutputBox.TextLength;
OutputBox.AppendText(InputText.Substring(LastMatchEndIndex, CurrentMatch.Index - LastMatchEndIndex));
OutputBox.SelectionStart = SelPos;
OutputBox.SelectionLength = OutputBox.TextLength - SelPos;
OutputBox.SelectionColor = Color.Black;
SelPos = OutputBox.TextLength;
OutputBox.AppendText(InputText.Substring(CurrentMatch.Index, CurrentMatch.Length));
OutputBox.SelectionStart = SelPos;
OutputBox.SelectionLength = OutputBox.TextLength - SelPos;
OutputBox.SelectionColor = Color.Red;
LastMatchEndIndex = CurrentMatch.Index + CurrentMatch.Length;
}
OutputBox.SelectionColor = Color.Black;
OutputBox.Text += InputText.Substring(LastMatchEndIndex, InputText.Length - LastMatchEndIndex);
}
更具体地说,如果我有一个正则表达式“s”和一个输入文本“asdf”,则此函数将“a”插入到输出框中。然后它将选择位置设置为 0,将选择长度设置为 1,然后将颜色设置为黑色。然后插入's',选择位置为1,长度为1,颜色为红色。然后它插入'df'将选择位置设置为2,长度设置为2,颜色设置为黑色。然后所有的输出都是黑色的。
我还尝试了各种选择起始位置和长度的方法,然后插入文本而没有任何效果。我认为我很可能在做一些不正确的事情,只是与文本框模糊相关。
还有什么会影响我可能没有注意的着色行为。