我正在尝试制作一个简单的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]。