执行语法突出显示时暂时禁用C#Rich Edit撤消缓冲区

时间:2010-11-09 21:45:30

标签: c# winforms richtextbox rich-text-editor richedit

我的Rich Edit控件中已经有了一个相当不错的syntax highlighter,但在它完全有用之前我还有一个最后的问题: 每当我运行语法着色时,它会在撤消缓冲区中记录那些着色操作,这是我真正不想要的。有没有办法暂时禁用录制撤消操作,以便在着色后用户可以按撤消,它只会撤消用户自己的操作而不是自动语法荧光笔?

我不认为我有时间实现Scintilla.NET编辑器只是为了解决这个问题。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您必须自己处理撤消/重做,而不是依赖RTB,这意味着挂钩键盘事件以侦听CTRL + Z等。

您可以看到codeproject的作者是如何为类似的RTB重写语法高亮编辑器做的:http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

答案 1 :(得分:1)

几乎@Karl Edwall上面说过,但并不完全:使用EM_GETOLEINTERFACE获取IRichEditOle界面并查询IID_ITextDocument

一旦你得到它,使用(而不是其他答案的冻结/解冻)Undo()方法:

  • Undo(tomSuspend,NULL);暂时暂停撤消
  • Undo(tomResume,NULL);再次恢复

(见http://support.microsoft.com/kb/199852。) 它需要RichEdit 3.0,但是从Windows XP SP1开始发布。

答案 2 :(得分:0)

从C ++开始,你要做的就是使用IRichEditOle COM接口,例如:进入ITextDocument TOM界面并调用Freeze和Unfreeze以防止您的更改进入撤消缓冲区。也许这篇文章http://www.codeproject.com/KB/edit/richtextboxplus.aspx可以帮助我们做到这一点。