C # RichTextBox: выделение + отмена - PullRequest
4 голосов
/ 16 мая 2011

Я делаю простой редактор xhtml с подсветкой синтаксиса. Проблема в том, что в истории отмены richtextbox все хранится. Даже моя подсветка меняется. Я уже обнаружил, что существует richtextbox.UndoActionName, который должен быть «Неизвестен», если вы изменяете richtextbox программно. Поэтому я попробовал что-то вроде этого при нажатии Ctrl + Z:

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

Который просто выделил весь мой текст и фактически ничего не отменял (просто продолжал цикл, пока я не остановил его ...). Поэтому мой вопрос заключается в том, нужно ли мне указывать где-нибудь имя отмены действий самостоятельно или я могу изменить richtextbox для записи истории отмены только для набора текста? Спасибо.

Редактировать: Было бы здорово, если бы я мог отправить сообщение в richtextbox, чтобы остановить запись истории отмен, пока я выделяю или как-то исключать или действия с неизвестным именем, есть ли способ сделать это

Редактировать 2: Ну, я сделал это глупо, я сохраняю весь текст в связанном списке, и при повторном выполнении я очищаю поле richtextbox и заполняю его последним элементом из списка, а затем повторно выделить. Может быть, это кому-нибудь поможет

1 Ответ

1 голос
/ 16 мая 2011

Проблема в том, что вы пытаетесь отменить последнее действие, которое будет отменено для следующей операции, следовательно, оно будет продолжать делать это.

Попробуйте это:

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