2010-11-09 28 views
1

J'ai déjà un assez correct dans mon contrôle Rich Edit mais j'ai un dernier problème avant qu'il ne soit pleinement utile: Chaque fois que j'exécute la coloration de la syntaxe, il enregistre ces coloriages actions dans le tampon d'annulation, que je ne veux pas vraiment. Est-il possible de désactiver temporairement les actions d'annulation d'enregistrement de sorte qu'après une coloration, l'utilisateur puisse appuyer sur Annuler et qu'il annule les actions de l'utilisateur et pas la surligneuse de syntaxe automatique?Désactivation temporaire du tampon d'annulation C# Rich Edit lors de la mise en évidence de la syntaxe

Je ne pense pas avoir le temps d'implémenter l'éditeur Scintilla.NET pour contourner ce problème. Aucune suggestion?

Répondre

1

Vous devrez gérer undo/redo-vous au lieu de compter sur RTB, ce qui signifie accrochage dans les événements de clavier pour écouter CTRL + Z, etc.

Vous pouvez voir comment cet auteur de CodeProject il a fait pour un éditeur de mise en surbrillance de syntaxe RTB-override similaire: http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

0

Bien à partir de C++ ce que vous feriez serait d'utiliser l'interface IRichEditOle COM par exemple pour accéder à l'interface ITextDocument TOM et appeler Freeze and Unfreeze pour empêcher vos modifications d'entrer dans le buvard Undo. Peut-être que cet article http://www.codeproject.com/KB/edit/richtextboxplus.aspx peut être d'une certaine aide en faisant cela.

+1

Les méthodes freeze et unfreeze semblent seulement l'empêcher d'afficher quoi que ce soit à l'écran pendant que vous effectuez une série de mises à jour. Je l'ai déjà couvert cependant. – Andos

1

Presque comme @Karl Edwall dit ci-dessus, mais pas tout à fait: Utilisez EM_GETOLEINTERFACE pour obtenir l'interface IRichEditOle et l'interroger pour IID_ITextDocument.

Une fois que vous obtenez cela, utilisez (au lieu de gel/Dégeler de l'autre réponse) la méthode Undo():

  • Undo(tomSuspend,NULL); de suspendre annuler temporairement
  • Undo(tomResume,NULL); pour reprendre à nouveau

(Voir http://support.microsoft.com/kb/199852.) Il nécessite RichEdit 3.0, mais il est disponible depuis Windows XP SP1.