C# RichTextBox: Маркиране + Отмяна

Правя прост xhtml редактор с подчертаване на синтаксиса. Проблемът е, че в richtextbox undo history всичко се съхранява. Дори маркирането ми се променя. Вече открих, че има richtextbox.UndoActionName, което трябва да бъде "Неизвестно", ако промените richtextbox програмно. Така че опитах нещо подобно, когато се натисне ctrl+z:

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

Което току-що избра целия ми текст и всъщност не отмени нищо (просто продължи да се повтаря, докато не го спра...). Така че въпросът ми е дали трябва сам да посоча някъде името на undoactionname или мога да променя richtextbox, за да записва хронологията на отмените само за въвеждане? Благодаря.

Редактиране: Би било страхотно, ако мога да изпратя съобщение до richtextbox, за да спра да записвам хронологията на отмените, докато маркирам или по някакъв начин да изключа или действия с Неизвестно име, има ли начин да направя това?

Редактиране 2: Е, направих го по глупавия начин, съхранявам целия текст в свързан списък и когато правя отново, изчиствам полето с богат текст и го запълвам с последния елемент от списъка и след това отново подчертайте. Може би това помага на някого


person haluzak    schedule 16.05.2011    source източник
comment
Е, направих го по глупавия начин, съхранявам целия текст в свързан списък и когато правя отново, изчиствам полето с богат текст и го запълвам с последния елемент от списъка и след това отново маркирам. Може би това помага на някого.   -  person haluzak    schedule 16.05.2011


Отговори (1)


Проблемът е, че се опитвате да отмените последното действие, което ще бъде отмяна за следваща операция, следователно ще продължи да прави това.

Опитайте тази:

while(richtextbox.CanUndo) {
  richtextbox.Undo();
  // Clear the undo buffer to prevent last action from being
  richtextbox.ClearUndo();
}
person user695663    schedule 16.05.2011
comment
Ще опитам това по-късно, но не мисля, че ще проработи. Това ще отмени последното действие (което най-вероятно е осветяване на синтаксиса) и след това ще изчисти буфера за отмяна. Искам да пропусна всички промени в осветяването на синтаксиса и да отменя промените при въвеждане. Или ClearUndo() изтрива само последния елемент за отмяна в историята? - person haluzak; 16.05.2011