彩色输出到richtextbox无法正常工作

时间:2012-06-12 21:25:01

标签: c# regex richtextbox

我有一个应该输出colred文本RichTextBox的函数。所有匹配应为红色,不匹配的文本为黑色。以下函数尝试在插入条目时更改RichTextBox内容颜色(在Color different parts of a RichTextBox string中工作)

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选择的大小。然后设置选择颜色,这也不起作用。尽管我检查并仔细检查选择是否开始并在适当的位置结束,但所有文本最后都是红色或黑色。 (我尝试过类似的东西:Selectively coloring text in 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,颜色设置为黑色。然后所有输出都是黑色的。

我还尝试了各种各样的东西,选择起始位置和长度,然后插入文本,没有任何影响。我认为我可能正在做一些与文本框模糊相关的错误。

还有什么可能会影响我可能不会注意的着色行为。

1 个答案:

答案 0 :(得分:0)

你没有做任何颜色选择,在你给出的链接中,他们在设置颜色之前定义了一个选择。

box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;

您需要找到并选择匹配项,然后为它们着色。

编辑:我没有对此进行过测试,但它看起来不对..

//set the start of the selection to the current end of the text box
OutputBox.SelectionStart = OutputBox.Text.Length - 1; 
//set the selections length
OutputBox.SelectionLength = CurrentMatch.Length;
//and finally set the color
OutputBox.SelectionColor = Color.Red;