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

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

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

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

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

几乎就像@Karl Edwall上面所说的那样,但并不完全:使用EM_GETOLEINTERFACE获取IRichEditOle接口并查询它以获取IID_ITextDocument

一旦你得到它,使用(而不是从另一个答案Freeze / Unfreeze) Undo()方法:

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

(请参阅http://support.microsoft.com/kb/199​​852 。)它需要RichEdit 3.0,但是从Windows XP SP1开始发布。

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