即例如考虑这句话。 “这是我的判决。”我希望程序首先突出显示'This'然后'is'等等。这实际上可以做到吗?我应该使用计时器吗?非常感谢帮助简要解释。提前谢谢。
答案 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无法真正使用。如果您希望用户输入一些文本,您应该先停止计时器。