C# RichTextBox:突出显示 + 撤消

本文关键字:显示 撤消 RichTextBox | 更新日期: 2023-09-27 17:56:47

我正在做一个简单的带有语法突出显示的 xhtml 编辑器。问题是在富文本框撤消历史记录中,所有内容都被存储。甚至我的突出显示也发生了变化。我已经发现,如果您以编程方式更改富文本框,则有一个richtextbox.UndoActionName应该是"未知"。所以我在按下 ctrl+z 时尝试了这样的事情:

while(richtextbox.CanUndo && richtextbox.UndoActionName == "Unknown"){
    richtextbox.Undo();
}
它只是

选择了我的整个文本,实际上并没有撤消任何内容(只是一直循环直到我停止它......所以我的问题是我是否需要自己在某处指定撤消名称,或者我是否可以更改富文本框以仅记录用于键入的撤消历史记录?谢谢。

编辑:如果我可以向richtextbox发送一条消息以在突出显示时停止记录撤消历史记录或以某种方式排除或具有未知名称的操作,那会很酷,有什么办法可以做到这一点吗?

编辑2:好吧,我以愚蠢的方式完成了它,我将整个文本存储在链表中,重做时我清除富文本框并用列表中的最后一项填充它,然后重新突出显示。也许这对任何人都有帮助

C# RichTextBox:突出显示 + 撤消

问题是您正在尝试撤消上一个操作,这将是下一个操作的撤消,因此它将继续这样做。

试试这个:

while(richtextbox.CanUndo) {
  richtextbox.Undo();
  // Clear the undo buffer to prevent last action from being
  richtextbox.ClearUndo();
}