C # RichTextBox: выделение отмена

#c# #richtextbox #undo

#c# #richtextbox #отменить

Вопрос:

Я делаю простой редактор xhtml с подсветкой синтаксиса. Проблема в том, что в истории отмен richtextbox сохраняется все. Меняется даже мое выделение. Я уже обнаружил, что есть richtextbox.UndoActionName который должен быть «Неизвестным», если вы измените richtextbox программно. Итак, я попробовал что-то подобное при нажатии ctrl z:

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

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

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

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

Комментарии:

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

Ответ №1:

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

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

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

Комментарии:

1. Я попробую это позже, но я не думаю, что это сработает. Это отменит последнее действие (которое, скорее всего, является подсветкой синтаксиса), а затем очистит буфер отмены. Я хочу пропустить все изменения подсветки синтаксиса и отменить изменения ввода. Или ClearUndo() удаляет только последний элемент отмены в истории?