在c#richtextbox中,如何按顺序突出显示句子中的单词。

时间:2015-03-16 07:59:20

标签: c#

即例如考虑这句话。 “这是我的判决。”我希望程序首先突出显示'This'然后'is'等等。这实际上可以做到吗?我应该使用计时器吗?非常感谢帮助简要解释。提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您不希望UI一直被阻止,那么计时器是一个不错的选择。您的问题的一个非常基本的解决方案如下:

将其添加到初始化代码中:

// index of highlighted text block
var i = 0;    

var timer = new Timer()
{
    Interval = 300
};

timer.Tick += new EventHandler((sender, e) =>
    {
        // split the elements to highlight by space character
        var textElements = this.richTextBox1.Text
            .Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries)
            .ToArray();

        // avoid dividing by zero when using modulo operator
        if (textElements.Length > 0)
        {
            // start all over again when the end of text is reached. 
            i = i % textElements.Length;

            // clear the RichTextBox
            this.richTextBox1.Text = string.Empty;

            for (var n = 0; n < textElements.Length; n++)
            {
                // now adding each text block again
                // choose color depending on the index
                this.richTextBox1.AppendText(textElements[n] + ' ', i == n ? Color.Red : Color.Black);
            }

            // increment the index for the next run
            i++;
        }
    });

    timer.Start();

此解决方案使用扩展方法。要使用此功能,您必须添加如下扩展类:

static class RichTextBoxExtensions
{
    public static void AppendText(this RichTextBox richtTextBox, string text, Color color)
    {
        richtTextBox.SelectionStart = richtTextBox.TextLength;
        richtTextBox.SelectionLength = 0;

        richtTextBox.SelectionColor = color;
        richtTextBox.AppendText(text);
        richtTextBox.SelectionColor = richtTextBox.ForeColor;
    }
}

您可以获得有关我使用的扩展方法的更多信息here

此解决方案的缺点是,在突出显示时,RichTextBox无法真正使用。如果您希望用户输入一些文本,您应该先停止计时器。