Fornecer suporte de desfazer para designersSupply undo support to designers
Designers, como editores, normalmente precisam oferecer suporte a operações de desfazer para que os usuários possam reverter suas alterações recentes ao modificar um elemento de código.Designers, like editors, typically need to support undo operations so that users can reverse their recent changes when modifying a code element.
A maioria dos designers implementados no Visual Studio têm suporte de "desfazer" automaticamente fornecido pelo ambiente.Most designers implemented in Visual Studio have "undo" support automatically provided by the environment.
Implementações de designer que precisam fornecer suporte para o recurso de desfazer:Designer implementations that need to provide support for the undo feature:
Fornecer gerenciamento de desfazer implementando a classe base abstrata UndoEngineProvide undo management by implementing the abstract base class UndoEngine
Forneça suporte a persistência e CodeDOM implementando IDesignerSerializationService as IComponentChangeService classes e.Supply persistence and CodeDOM support by implementing the IDesignerSerializationService and IComponentChangeService classes.
Para obter mais informações sobre como escrever designers usando .NET Framework, consulte estender Design-Time support.For more information on writing designers using .NET Framework, see Extend Design-Time Support.
O SDK do Visual StudioVisual Studio SDK fornece uma infraestrutura de desfazer padrão por:The SDK do Visual StudioVisual Studio SDK provides a default undo infrastructure by:
Fornecer implementações de gerenciamento de desfazer por meio das OleUndoEngine OleUndoEngine.UndoUnit classes e.Providing undo management implementations through the OleUndoEngine and OleUndoEngine.UndoUnit classes.
Fornecendo suporte a persistência e CodeDOM por meio do padrão CodeDomComponentSerializationService e das IComponentChangeService implementações.Supplying persistence and CodeDOM support through the default CodeDomComponentSerializationService and IComponentChangeService implementations.
Obter suporte de desfazer automaticamenteObtain Undo Support Automatically
Qualquer designer criado no Visual Studio terá suporte a desfazer automático e completo se, o designer:Any designer created in Visual Studio has automatic and full undo support if, the designer:
Usa uma Control classe baseada em sua interface do usuário.Makes use of a Control based class for its user interface.
Emprega a geração de código baseado em CodeDOM padrão e o sistema de análise para a geração e persistência de código.Employs standard CodeDOM-based code generation and parsing system for code generation and persistence.
Para obter mais informações sobre como trabalhar com o suporte a CodeDOM do Visual Studio, consulte geração e compilação de código-fonte dinâmico.For more information about working with Visual Studio CodeDOM support, see Dynamic Source Code Generation and Compilation.
Quando usar o suporte de desfazer do designer explícitoWhen to Use Explicit Designer Undo Support
Os designers devem fornecer seu próprio gerenciamento de desfazer se usarem uma interface gráfica do usuário, conhecida como adaptador de exibição, diferente daquele fornecido pelo Control .Designers must supply their own undo management if they use a graphical user interface, referred to as a view adapter, other than the one supplied by Control.
Um exemplo disso pode ser a criação de um produto com uma interface de design gráfico baseada na Web em vez de uma interface gráfica baseada em .NET Framework.An example of this might be creating a product with a web-based graphical design interface rather than a .NET Framework-based graphical interface.
Nesses casos, seria necessário registrar esse adaptador de exibição com o Visual Studio usando ProvideViewAdapterAttribute e fornecer gerenciamento de desfazer explícito.In such cases, one would need to register this view adapter with Visual Studio using ProvideViewAdapterAttribute, and provide explicit undo management.
Os designers precisam fornecer suporte a CodeDOM e persistência se não usarem o modelo de geração de código do Visual Studio fornecido no System.CodeDom espaço de nome.Designers need to provide CodeDOM and persistence support if they do not use the Visual Studio code generation model provided in the System.CodeDom name space.
Desfazer recursos de suporte do designerUndo Support Features of the Designer
O SDK do ambiente fornece implementações padrão de interfaces necessárias para fornecer suporte de desfazer que pode ser usado por designers que não usam Control classes baseadas em suas interfaces de usuário ou o modelo CodeDOM e persistência padrão.The Environment SDK provides default implementations of interfaces needed to provide undo support that can be used by designers not using Control based classes for their user interfaces or the standard CodeDOM and persistence model.
A OleUndoEngine classe deriva da UndoEngine classe .NET Framework usando uma implementação da IOleUndoManager classe para gerenciar operações de desfazer.The OleUndoEngine class derives from the .NET Framework UndoEngine class using an implementation of the IOleUndoManager class to manage undo operations.
O Visual Studio fornece o seguinte recurso para o designer desfazer:Visual Studio provides the following feature to designer undo:
Funcionalidade de desfazer vinculada em vários designers.Linked undo functionality across multiple designers.
As unidades filhas dentro de um designer podem interagir com seus pais implementando IOleUndoUnit e IOleParentUndoUnit em OleUndoEngine.UndoUnit .Child units within a designer can interact with their parents by implementing IOleUndoUnit and IOleParentUndoUnit on OleUndoEngine.UndoUnit.
O SDK do ambiente fornece suporte a CodeDOM e persistência fornecendo:The Environment SDK provides CodeDOM and persistence support by supplying:
CodeDomComponentSerializationService como uma implementação do IDesignerSerializationServiceCodeDomComponentSerializationService as an implementation of the IDesignerSerializationService
Um IComponentChangeService fornecido pelo host de design do Visual Studio.A IComponentChangeService provided by the Visual Studio design host.
Usar os recursos do SDK do ambiente para fornecer suporte de desfazerUse the Environment SDK Features to Supply Undo Support
Para obter o suporte de desfazer, um objeto que implementa um designer deve instanciar e inicializar uma instância da OleUndoEngine classe com uma IServiceProvider implementação válida.To obtain undo support, an object implementing a designer must instantiate and initialize an instance of the OleUndoEngine class with a valid IServiceProvider implementation. Essa IServiceProvider classe deve fornecer os seguintes serviços:This IServiceProvider class must provide the following services:
-
Os designers que usam a serialização do CodeDOM do Visual Studio podem optar CodeDomComponentSerializationService pelo uso fornecido com o SDK do Visual StudioVisual Studio SDK como sua implementação do IDesignerSerializationService .Designers using Visual Studio CodeDOM serialization may choose to use CodeDomComponentSerializationService provided with the SDK do Visual StudioVisual Studio SDK as its implementation of the IDesignerSerializationService.
Nesse caso, a IServiceProvider classe fornecida para o OleUndoEngine Construtor deve retornar esse objeto como uma implementação da IDesignerSerializationService classe.In this case, the IServiceProvider class provided to the OleUndoEngine constructor should return this object as an implementation of the IDesignerSerializationService class.
-
Os designers que usam o padrão DesignSurface fornecido pelo host de design do Visual Studio têm a garantia de ter uma implementação padrão da IComponentChangeService classe.Designers using the default DesignSurface provided by the Visual Studio design host are guaranteed to have a default implementation of the IComponentChangeService class.
Os designers que implementam um OleUndoEngine mecanismo de desfazer baseado controlam automaticamente as alterações se:Designers implementing a OleUndoEngine based undo mechanism automatically tracks changes if:
As alterações de propriedade são feitas por meio do TypeDescriptor objeto.Property changes are made through the TypeDescriptor object.
IComponentChangeService os eventos são gerados manualmente quando uma alteração desfeita é confirmada.IComponentChangeService events are manually generated when an undoable change is committed.
A modificação no designer foi criada no contexto de um DesignerTransaction .Modification on the designer was created within the context of a DesignerTransaction.
O designer opta por criar explicitamente unidades de desfazer usando a unidade de desfazer padrão fornecida por uma implementação UndoEngine.UndoUnit ou a implementação específica do Visual Studio OleUndoEngine.UndoUnit , que deriva de UndoEngine.UndoUnit e também fornece uma implementação de IOleUndoUnit e IOleParentUndoUnit .The designer chooses to explicitly create undo units using either the standard undo unit provided by an implementation of UndoEngine.UndoUnit or the Visual Studio-specific implementation OleUndoEngine.UndoUnit, which derives from UndoEngine.UndoUnit and also provides an implementation of both IOleUndoUnit and IOleParentUndoUnit.