Fournir une prise en charge d’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 inverser leurs modifications récentes lors de la modification d’un élément de code.
La plupart des concepteurs implémentés dans Visual Studio ont une prise en charge « annuler » automatiquement fournie par l’environnement.
Implémentations du concepteur qui doivent fournir une prise en charge de la fonctionnalité d’annulation :
Fournir une gestion des annulations en implémentant la classe de base abstraite UndoEngine
Fournissez la persistance et la prise en charge de CodeDOM en implémentant les classes et IComponentChangeService les IDesignerSerializationService classes.
Pour plus d’informations sur l’écriture de concepteurs à l’aide de .NET Framework, consultez Extension de la prise en charge au moment du design.
Le Kit de développement logiciel (SDK) Visual Studio fournit une infrastructure d’annulation par défaut en :
Fournir des implémentations de gestion d’annulation via les classes et OleUndoEngine.UndoUnit les OleUndoEngine classes.
Fourniture de la persistance et de la prise en charge de CodeDOM par le biais des implémentations et IComponentChangeService par défautCodeDomComponentSerializationService.
Obtenir la prise en charge de l’annulation automatiquement
Tout concepteur créé dans Visual Studio a la prise en charge automatique et complète de l’annulation si, le concepteur :
Utilise une Control classe basée pour son interface utilisateur.
Utilise le système standard de génération et d’analyse de code basé sur CodeDOM pour la génération et la persistance du code.
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 de l’annulation du concepteur explicite
Les concepteurs doivent fournir leur propre gestion d’annulation s’ils utilisent une interface utilisateur graphique, appelée adaptateur de vue, autre que celui fourni par Control.
Par exemple, vous pouvez créer un produit avec une interface de conception graphique web plutôt qu’une interface graphique basée sur .NET Framework.
Dans ce cas, il faudrait inscrire cet adaptateur de vue auprès de Visual Studio à l’aide ProvideViewAdapterAttributede Visual Studio et fournir une gestion d’annulation explicite.
Les concepteurs doivent fournir la prise en charge de CodeDOM et de persistance s’ils n’utilisent pas le modèle de génération de code Visual Studio fourni dans l’espace System.CodeDom de noms.
Annuler les fonctionnalités de prise en charge du concepteur
Le Kit de développement logiciel (SDK) Environment fournit des implémentations par défaut d’interfaces nécessaires pour fournir une prise en charge d’annulation qui peut être utilisée par les concepteurs qui n’utilisent Control pas de classes basées pour leurs interfaces utilisateur ou le modèle de persistance codeDOM et de persistance standard.
La OleUndoEngine classe dérive de la classe .NET Framework UndoEngine à l’aide d’une implémentation de la IOleUndoManager classe pour gérer les opérations d’annulation.
Visual Studio fournit la fonctionnalité suivante pour annuler le concepteur :
Fonctionnalité d’annulation liée entre plusieurs concepteurs.
Les unités enfants au sein d’un concepteur peuvent interagir avec leurs parents en implémentant IOleUndoUnit et IOleParentUndoUnit sur OleUndoEngine.UndoUnit.
Le Kit de développement logiciel (SDK) d’environnement fournit la prise en charge de CodeDOM et de persistance en fournissant :
CodeDomComponentSerializationService en tant qu’implémentation du IDesignerSerializationService
Fourni IComponentChangeService par l’hôte de conception Visual Studio.
Utiliser les fonctionnalités du Kit de développement logiciel (SDK) d’environnement pour fournir une prise en charge d’annulation
Pour obtenir la prise en charge d’annulation, un objet implémentant un concepteur doit instancier et initialiser une instance de la OleUndoEngine classe avec une implémentation valide IServiceProvider . Cette IServiceProvider classe doit fournir les services suivants :
-
Les concepteurs utilisant la sérialisation Visual Studio CodeDOM peuvent choisir d’utiliser CodeDomComponentSerializationService fourni avec le Kit de développement logiciel (SDK) Visual Studio comme implémentation de l’objet IDesignerSerializationService.
Dans ce cas, la IServiceProvider classe fournie au OleUndoEngine constructeur doit retourner cet objet en tant qu’implémentation de la IDesignerSerializationService classe.
-
Les concepteurs utilisant la valeur par défaut DesignSurface fournie par l’hôte de conception Visual Studio sont garantis pour avoir une implémentation par défaut de la IComponentChangeService classe.
Les concepteurs implémentant un mécanisme d’annulation OleUndoEngine basé effectuent automatiquement le suivi des modifications si :
Les modifications de propriété sont apportées via l’objet TypeDescriptor .
IComponentChangeService les événements sont générés manuellement lorsqu’une modification non modifiable est validée.
La modification sur le concepteur a été créée dans le contexte d’un DesignerTransaction.
Le concepteur choisit de créer explicitement des unités d’annulation à l’aide de l’unité d’annulation standard fournie par une implémentation ou de UndoEngine.UndoUnit l’implémentation OleUndoEngine.UndoUnitspécifique à Visual Studio, qui dérive UndoEngine.UndoUnit et fournit également une implémentation des deux IOleUndoUnit et IOleParentUndoUnit.