Fournir la prise en charge de l'annulation aux concepteurs
Les concepteurs, comme les éditeurs, doivent généralement prendre en charge les opérations d'annulation afin que les utilisateurs puissent annuler les modifications récentes en modifiant un élément de code.
La plupart des concepteurs implémentés dans Visual Studio font fourni automatiquement la prise en charge de l'annulation par l'environnement.
Implémentations du concepteur qui doivent fournir une prise en charge de la fonctionnalité d'annulation :
Fournissez la gestion d'annulation en implémentant la classe de base abstraite UndoEngine
Confiez la persistance et la prise en charge CodeDOM en implémentant IDesignerSerializationService et les classes d' IComponentChangeService .
Pour plus d'informations sur les générateurs d'écriture à l'aide de .NET Framework, consultez l' Extension de la prise en charge au moment du design.
Kit de développement logiciel Visual Studio fournit une infrastructure par défaut d'annulation par :
Fourniture des implémentations de gestion d'annulation via les classes d' OleUndoEngine et d' UndoUnit .
Fournir la persistance et la prise en charge CodeDOM via CodeDomComponentSerializationService et les implémentations par défaut d' IComponentChangeService .
Obtention de la prise en charge de l'annulation automatiquement
Tout concepteur créé dans Visual Studio possède une prise en charge automatique et totale d'annulation si, le concepteur :
Se sert d'une classe basée sur une Control pour son interface utilisateur.
Utilise le système de génération du code CodeDOM-basé standard et d'analyse pour la génération de code et la persistance.
Pour plus d'informations sur l'utilisation de la prise en charge de Visual Studio CodeDOM, consultez Génération et compilation de code source dynamique
Quand utiliser la prise en charge du concepteur explicite d'annulation
Les concepteurs doivent fournir leur propre gestion d'annulation s'ils utilisent une interface utilisateur graphique, connue sous le nom d'un adaptateur de vue, autre que celle fournie par Control.
Un exemple de cela peut créer un produit avec une interface graphique basée sur le WEB de conception plutôt qu'une interface graphique basée sur une .NET Framework .
Dans ce cas, il doit stocker cet adaptateur de vue avec Visual Studio à l'aide de ProvideViewAdapterAttribute, et assure la gestion explicite d'annulation.
Les concepteurs doivent fournir CodeDOM et prise en charge de persistance s'ils n'utilisent pas le modèle de génération de code Visual Studio fourni dans l'espace de noms d' System.CodeDom .
Fonctionnalités de prise en charge de l'annulation du concepteur
L'environnement Kit de développement SDK fournit des implémentations par défaut d'interfaces nécessaires pour fournir la prise en charge de l'annulation qui peut être utilisée par les concepteurs ne pas utiliser Control en fonction de les classes pour leurs interfaces utilisateur ou le modèle standard CodeDOM et de persistance.
La classe d' OleUndoEngine dérive de la classe de .NET FrameworkUndoEngine à l'aide d'une implémentation de la classe d' IOleUndoManager pour gérer des opérations d'annulation.
Visual Studio fournit les fonctionnalités suivantes à l'annulation du concepteur :
Fonctionnalités d'annulation liée à travers plusieurs concepteurs.
Les unités enfants dans un concepteur peuvent interagir avec leurs parents en implémentant IOleUndoUnit et IOleParentUndoUnit sur UndoUnit.
L'environnement Kit de développement SDK fournit CodeDOM et prise en charge de persistance en fournissant :
- CodeDomComponentSerializationService comme implémentations d' IDesignerSerializationService
IComponentChangeService fourni par l'hôte de création de Visual Studio .
À l'aide de les fonctionnalités de l'environnement Kit de développement logiciel pour assurer la prise en charge de l'annulation
Pour obtenir la prise en charge de l'annulation, un objet implémentant un concepteur doit :
instanciez et initialisez une instance de la classe d' OleUndoEngine avec une implémentation valide d' IServiceProvider .
cette classe d' IServiceProvider doit fournir les services suivants :
-
Les concepteurs que vous utilisez la sérialisation de Visual Studio CodeDOM peuvent choisir d'utiliser CodeDomComponentSerializationService instrumenté de Kit de développement logiciel Visual Studio comme son implémentation d' IDesignerSerializationService.
Dans ce cas, la classe d' IServiceProvider fournie au constructeur d' OleUndoEngine doit retourner cet objet en tant qu'implémentation de la classe d' IDesignerSerializationService .
-
Les concepteurs à l'aide de DesignSurface par défaut fourni par l'hôte de création de Visual Studio sont garantie avoir une implémentation par défaut de la classe d' IComponentChangeService .
Les concepteurs implémentant un mécanisme d'annulation basé sur OleUndoEngine suit automatiquement les modifications si :
Les modifications de propriété apportées par l'objet d' TypeDescriptor .
les événements d'IComponentChangeService manuellement sont générés lorsqu'une modification annulable est validée.
La modification dans le concepteur a été créée dans le contexte d' DesignerTransaction.
Le concepteur choisit de créer explicitement des unités undo à l'aide de l'unité undo standard fournie par une implémentation d' UndoUnit ou l'implémentation visuelle UndoUnitde Studio-détail, qui dérive d' UndoUnit et fournit également une implémentation d' IOleUndoUnit et d' IOleParentUndoUnit.