Временное отключение буфера отмены C # Rich Edit при выполнении подсветки синтаксиса - PullRequest
1 голос
/ 10 ноября 2010

У меня уже есть довольно приличная подсветка синтаксиса в моем элементе управления Rich Edit, но у меня есть одна последняя проблема, прежде чем она станет полностью полезной: всякий раз, когда я запускаю раскраску синтаксиса, он записывает эти действия окраски в буфере отменычего я не очень хочу.Есть ли способ временно отключить запись отмены действий, чтобы после раскраски пользователь мог нажать отмену, и он будет отменять только собственные действия пользователя, а не автоматическую подсветку синтаксиса?

Не думаю, что у меня естьвремя реализовать редактор Scintilla.NET, чтобы обойти эту проблему.Есть предложения?

Ответы [ 3 ]

1 голос
/ 27 ноября 2014

Почти как @Karl Edwall говорит выше, но не совсем: используйте EM_GETOLEINTERFACE, чтобы получить IRichEditOle интерфейс и запросите его для IID_ITextDocument.

Как только вы получите это, используйте (вместо Freeze / Unfreeze из другого ответа) метод Undo():

  • Undo(tomSuspend,NULL); для временного приостановления отмены
  • Undo(tomResume,NULL); чтобы возобновить это снова

(см. http://support.microsoft.com/kb/199852.) Требуется RichEdit 3.0, но он поставляется с Windows XP SP1.

1 голос
/ 10 ноября 2010

Вам придется самостоятельно обрабатывать отмену / повтор, вместо того чтобы полагаться на RTB, что означает подключение к событиям клавиатуры для прослушивания CTRL + Z и т. Д.

Вы можете увидеть, как этот автор из codeproject сделал это для аналогичного RTB-переопределенного редактора подсветки синтаксиса: http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

0 голосов
/ 27 ноября 2010

Что ж, в C ++ вам нужно использовать интерфейс IRichEditOle COM, например. чтобы добраться до интерфейса TOM ITextDocument и вызвать Freeze и Unfreeze, чтобы предотвратить внесение изменений в буфер отмены. Может быть, эта статья http://www.codeproject.com/KB/edit/richtextboxplus.aspx может помочь в этом.

...