RichTextbox格式非常慢



我正在尝试制作一个简单的Wysiwyg编辑器。我发现很难格式化RTB。它应该格式化基本的东西,例如大胆,斜体,着色(和混合)。

到目前为止,我发现和尝试了什么:

private void boldButton_Click(object sender, EventArgs e)
{
  int start = rtb.SelectionStart;
  int length = rtb.SelectionLength;
  for (int i = start, max = start + length; i < max; ++i)
  {
    rtb.Select(i, 1);
    rtb.SelectionFont = new Font(rtb.Font, rtb.SelectionFont.Style | FontStyle.Bold);
  }
  rtb.SelectionStart = start;
  rtb.SelectionLength = length;
  rtb.Focus();
}

rtb = richtextbox。

这可以按预期工作,但速度非常慢。我还发现了有关直接使用和格式化RTF的想法,但是格式似乎太复杂了,很容易误解它。我希望这是一个更好的解决方案。

谢谢。

表现命中可能取决于您在每个角色中循环的事实,而不是一次做所有事情:

        var start = this.rtb.SelectionStart;
        var length = this.rtb.SelectionLength;
        this.rtb.Select(start, length);
        this.rtb.SelectionFont = new Font(this.rtb.Font, this.rtb.SelectionFont.Style | FontStyle.Bold);

我本人也遇到了同样的问题。有趣的是,我发现,如果您在循环循环时不参考控件的属性,则可以通过数量级加速格式化。取而代之的是,在输入循环之前,将必要的控制属性放在单独的变量中。例如,而不是连续引用,例如richtextbox1.length,替换为int len = richtextbox1.length,然后参考环内的len。而不是引用RichTextbox1.text [index],而是用字符串text = richtextbox1.text替换为循环前,然后在循环中进行文本[index]。

最新更新