2011-05-16 89 views
4

我正在做一个简单的xhtml编辑器,并带有语法高亮显示。 问题是,在richtextbox撤消历史记录中一切都被存储。甚至我的突出变化。 我已经发现有一个richtextbox.UndoActionName如果以编程方式更改richtextbox,它应该是“未知”。所以,我想这样的事情按CTRL + Z时:C#RichTextBox:突出显示+撤消

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

刚刚选中我的整个文本,并没有实际撤消任何东西(只是一直循环下去,直到我停止了......)。 所以我的问题是我是否需要自己指定某个地方的undoactionname,或者我是否可以更改richtextbox以仅记录撤消历史记录以便输入? 谢谢。

编辑:这将是冷静,如果我可以将消息发送到RichTextBox的停止录制撤消历史,而我所强调或与未知的名称在某种程度上排除或动作,有没有办法做到这一点?

编辑2:嗯,我已经做了愚蠢的办法,我存储在链表整个文本和重做时,我明确的RichTextBox,然后从列表与去年填写项,然后重新亮点。也许这可以帮助任何人

+0

嗯,我已经做了愚蠢的办法,我存储在链表整个文本,当我重做清除RichTextBox的,从列表中与最后一个项目填补它与然后重新突出显示。也许这有助于任何人。 – haluzak 2011-05-16 14:15:39

回答

1

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

试试这个:

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

我稍后再试,但我认为这不会起作用。这将撤消最后一个操作(最有可能是语法高亮),然后清除撤消缓冲区。我想跳过所有突出显示更改的语法,并撤消键入更改。或者,ClearUndo()是否只删除历史记录中的最后一个撤销项目? – haluzak 2011-05-16 07:41:49