Fornire supporto per annullare l'annullamento per le finestre di progettazione
I progettisti, come gli editor, in genere devono supportare operazioni di annullamento in modo che gli utenti possano annullare le modifiche recenti durante la modifica di un elemento di codice.
La maggior parte dei progettisti implementati in Visual Studio include il supporto "annulla" fornito automaticamente dall'ambiente.
Implementazioni della finestra di progettazione che devono fornire supporto per la funzionalità di annullamento:
Fornire la gestione di annullamento implementando la classe base astratta UndoEngine
Fornire il supporto di persistenza e CodeDOM implementando le IDesignerSerializationService classi e IComponentChangeService .
Per altre informazioni sulla scrittura di finestre di progettazione con .NET Framework, vedere Estendere il supporto della fase di progettazione.
Visual Studio SDK fornisce un'infrastruttura di annullamento predefinita per:
Implementazioni di annullamento della gestione tramite le OleUndoEngine classi e OleUndoEngine.UndoUnit .
Fornire il supporto di persistenza e CodeDOM tramite le implementazioni predefinite CodeDomComponentSerializationService e IComponentChangeService .
Ottenere automaticamente il supporto di annullamento
Qualsiasi finestra di progettazione creata in Visual Studio include il supporto automatico e completo di annullamento se, la finestra di progettazione:
Usa una Control classe basata per l'interfaccia utente.
Usa il sistema di generazione e analisi del codice basato su CodeDOM standard per la generazione e la persistenza del codice.
Per altre informazioni sull'uso del supporto di Visual Studio CodeDOM, vedere Generazione e compilazione dinamica del codice sorgente.
Quando usare il supporto di annullamento della finestra di progettazione esplicita
I progettisti devono fornire la propria gestione di annullamento se usano un'interfaccia utente grafica, denominata scheda di visualizzazione, diversa da quella fornita da Control.
Un esempio potrebbe essere la creazione di un prodotto con un'interfaccia grafica basata sul Web anziché un'interfaccia grafica basata su .NET Framework.
In questi casi, è necessario registrare l'adattatore di visualizzazione con Visual Studio usando ProvideViewAdapterAttributee fornire una gestione esplicita di annullamento.
I progettisti devono fornire supporto codeDOM e persistenza se non usano il modello di generazione di codice di Visual Studio fornito nello spazio dei System.CodeDom nomi.
Annullare le funzionalità di supporto della finestra di progettazione
Environment SDK fornisce implementazioni predefinite delle interfacce necessarie per fornire supporto di annullamento che può essere usato dai progettisti che non usano Control classi basate per le interfacce utente o il modello di persistenza e CodeDOM standard.
La OleUndoEngine classe deriva dalla classe .NET Framework UndoEngine usando un'implementazione della IOleUndoManager classe per gestire le operazioni di annullamento.
Visual Studio offre la funzionalità seguente per annullare la finestra di progettazione:
Funzionalità di annullamento collegate tra più finestre di progettazione.
Le unità figlio all'interno di una finestra di progettazione possono interagire con i genitori implementando IOleUndoUnit e IOleParentUndoUnit in OleUndoEngine.UndoUnit.
Environment SDK offre il supporto codeDOM e persistenza fornendo:
CodeDomComponentSerializationService come implementazione del IDesignerSerializationService
Oggetto IComponentChangeService fornito dall'host di progettazione di Visual Studio.
Usare le funzionalità di Environment SDK per fornire il supporto di annullamento
Per ottenere il supporto di annullamento, un oggetto che implementa una finestra di progettazione deve creare un'istanza e inizializzare un'istanza della OleUndoEngine classe con un'implementazione valida IServiceProvider . Questa IServiceProvider classe deve fornire i servizi seguenti:
-
I progettisti che usano la serializzazione di Visual Studio CodeDOM possono scegliere di usare CodeDomComponentSerializationService forniti con Visual Studio SDK come implementazione di IDesignerSerializationService.
In questo caso, la IServiceProvider classe fornita al OleUndoEngine costruttore deve restituire questo oggetto come implementazione della IDesignerSerializationService classe .
-
I progettisti che usano l'impostazione predefinita fornita dall'host di progettazione di Visual Studio hanno sicuramente un'implementazione predefinita DesignSurface della IComponentChangeService classe .
I progettisti che implementano un OleUndoEngine meccanismo di annullamento basato rilevano automaticamente le modifiche se:
Le modifiche alle proprietà vengono apportate tramite l'oggetto TypeDescriptor .
IComponentChangeService gli eventi vengono generati manualmente quando viene eseguito il commit di una modifica annullabile.
La modifica della finestra di progettazione è stata creata all'interno del contesto di un oggetto DesignerTransaction.
La finestra di progettazione sceglie di creare in modo esplicito unità di annullamento usando l'unità di annullamento standard fornita da un'implementazione di o dall'implementazione OleUndoEngine.UndoUnitspecifica di UndoEngine.UndoUnit Visual Studio , che deriva da UndoEngine.UndoUnit e fornisce anche un'implementazione di sia IOleUndoUnit che IOleParentUndoUnit.