none
RichTextBox如何实现只更新变更处的样式 RRS feed

  • 问题

  • 我想做一个代码高亮, 但是如果每次TextChanged都要渲染整个RichTextBox, 会造成严重的性能问题, 如何做到只更改变更处的样式呢?
    2016年5月1日 3:27

答案

  • 你好,

    如同二楼所说,请提供一下代码或者重现样本以方便我们帮你尝试优化这个问题。选中字体格式化方法:

            //format input font
            private void RichTextBoxFormatFont(RichTextBox rtxt, int start, int length, Font font)
            {
                rtxt.Select(start, length);
                rtxt.SelectionFont = font;
                rtxt.SelectionColor = Color.LightBlue;
                rtxt.Select(rtxt.Text.Length, 0);//the below code use to cancel select
            }

    然后你可以用类似鼠标点击之类的事件获取当前字符index,然后调用格式化方法追加格式化文本就行了。

    另外,你也可以尝试添加一个判断用变量(判断开始编辑,结束编辑),把修改前的文本保存,然后和修改后的对比提取出变化的文本最后高亮或者格式化。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.




    2016年5月25日 5:31

全部回复

  • 你好 zhang,

    请问下你的程序是WinForm还是WPF? 能上传一个示例吗?不是很了解你说的严重的性能问题具体是指什么?请详细说明或者上传一个能够重新问题的sample 到任意的云空间并共享一个连接到论坛。

    谢谢。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月3日 9:25
    版主
  • 是winform, 如果载入的文档非常长的话, 细微的一处改动, 就不得不从头开始更新样式, 很浪费时间
    2016年5月7日 14:01
  • 你好,

    如同二楼所说,请提供一下代码或者重现样本以方便我们帮你尝试优化这个问题。选中字体格式化方法:

            //format input font
            private void RichTextBoxFormatFont(RichTextBox rtxt, int start, int length, Font font)
            {
                rtxt.Select(start, length);
                rtxt.SelectionFont = font;
                rtxt.SelectionColor = Color.LightBlue;
                rtxt.Select(rtxt.Text.Length, 0);//the below code use to cancel select
            }

    然后你可以用类似鼠标点击之类的事件获取当前字符index,然后调用格式化方法追加格式化文本就行了。

    另外,你也可以尝试添加一个判断用变量(判断开始编辑,结束编辑),把修改前的文本保存,然后和修改后的对比提取出变化的文本最后高亮或者格式化。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.




    2016年5月25日 5:31