我正在尝试制作一个简单的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的想法,但格式似乎太复杂,很容易误认。 我希望这是一个更好的解决方案。
谢谢。
答案 0 :(得分:1)
性能上升可能取决于你在每个角色中循环而不是一次性完成所有事情的事实:
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);
答案 1 :(得分:0)
我自己也遇到过同样的问题。有趣的是,我发现如果你在循环时没有引用控件的属性,你可以加快格式化一个数量级。相反,在进入循环之前,将必要的控件属性放在单独的变量中。例如,而不是连续地参考例如richTextBox1.Length,替换为int len = richTextBox1.Length,然后在循环内引用len。而不是引用richTextBox1.Text [index],在循环之前用字符串text = richTextBox1.Text替换,然后在循环中替换text [index]。