2011-05-16 115 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