デザイナー向けの元に戻す操作のサポートを提供する
通常、エディターと同様に、デザイナーではコード要素を変更するときにユーザーが最新の変更を元に戻すことができるように、元に戻す操作をサポートする必要があります。
Visual Studio で実装されているほとんどのデザイナーには、環境によって自動的に提供される "元に戻す" 操作のサポートがあります。
元に戻す機能のサポートを提供する必要があるデザイナーの実装は次のとおりです。
抽象基本クラス UndoEngine を実装して、元に戻す操作の管理を提供します
IDesignerSerializationService と IComponentChangeService クラスを実装して、永続化および CodeDOM サポートを提供します。
.NET Framework を使用したデザイナーの作成の詳細については、「デザイン時のサポートの拡張」を参照してください。
Visual Studio SDK から、次のように既定の元に戻す操作のインフラストラクチャが提供されます。
OleUndoEngine と OleUndoEngine.UndoUnit クラスを使用して、元に戻す操作の管理の実装を提供します。
既定の CodeDomComponentSerializationService と IComponentChangeService 実装を使用して、永続化および CodeDOM サポートを提供します。
元に戻す操作のサポートを自動的に取得する
Visual Studio で作成されたすべてのデザイナーでは、デザイナーが次の場合に自動および完全な復元がサポートされます。
ユーザー インターフェイスに Control に基づいたクラスを使用しています。
コードの生成と永続化のために、CodeDOM ベースの標準的なコード生成および解析システムを使用しています。
Visual Studio CodeDOM サポートの使用方法の詳細については、動的ソースコードの生成とコンパイルに関するページを参照してください。
明示的なデザイナーの元に戻す操作のサポートを使用する場合
デザイナーでは、Control により提供されるもの以外のグラフィカル ユーザー インターフェイス (ビュー アダプター) を使用する場合、独自の元に戻す操作の管理を提供する必要があります。
この例としては、.NET Framework ベースのグラフィカル インターフェイスではなく、Web ベースのグラフィカル デザイン インターフェイスを使用して製品を作成することが考えられます。
このような場合は、ProvideViewAdapterAttribute を使用してこのビュー アダプターを Visual Studio に登録し、明示的な元に戻す操作の管理を提供する必要があります。
System.CodeDom 名前空間に用意されている Visual Studio コード生成モデルを使用しない場合、デザイナーでは CodeDOM および永続化サポートを提供する必要があります。
デザイナーの元に戻す操作のサポート機能
環境 SDK には、ユーザー インターフェイスまたは標準の CodeDOM および永続化モデルに対して Control ベースのクラスを使用しないデザイナーで使用できる、元に戻す機能を提供するために必要なインターフェイスの既定の実装が用意されています。
OleUndoEngine クラスは、元に戻す操作を管理する IOleUndoManager クラスの実装を使用する .NET Framework UndoEngine クラスから派生します。
Visual Studio では、デザイナーの元に戻す操作のための次の機能が用意されています。
複数のデザイナー間でリンクされた元に戻す機能。
デザイナー内の子ユニットは、OleUndoEngine.UndoUnit に IOleUndoUnit と IOleParentUndoUnit を実装することによって、親と対話できます。
環境 SDK では、次のように指定することで、CodeDOM および永続化をサポートしています。
IDesignerSerializationService の実装としての CodeDomComponentSerializationService
Visual Studio デザイン ホストによって提供される IComponentChangeService。
環境 SDK 機能を使用して元に戻す操作のサポートを提供する
元に戻す操作のサポートを取得するには、デザイナーを実装するオブジェクトで、有効な IServiceProvider の実装を使用して OleUndoEngine クラスのインスタンスをインスタンス化し、初期化する必要があります。 この IServiceProvider クラスは、次のサービスを提供する必要があります。
-
Visual Studio CodeDOM シリアル化を使用するデザイナーは、IDesignerSerializationService の実装として、Visual Studio SDK で提供される CodeDomComponentSerializationService を使用することができます。
この場合、OleUndoEngine コンストラクターに提供される IServiceProvider クラスでは、このオブジェクトを IDesignerSerializationService クラスの実装として返す必要があります。
-
Visual Studio デザイン ホストによって提供される既定の DesignSurface を使用するデザイナーには、IComponentChangeService クラスの既定の実装があることが保証されます。
OleUndoEngine ベースの元に戻すメカニズムを実装するデザイナーでは、次の場合に変更が自動的に追跡されます。
プロパティの変更が、TypeDescriptor オブジェクトを使用して行われた場合。
IComponentChangeService イベントが、元に戻すことが可能な変更がコミットされると、手動で生成された場合。
デザイナーでの変更が、DesignerTransaction のコンテキスト内で作成された場合。
デザイナーで、UndoEngine.UndoUnit の実装によって提供される標準の元に戻す操作ユニット、または UndoEngine.UndoUnit から派生した Visual Studio 固有の実装 OleUndoEngine.UndoUnit のいずれかを使用して、元に戻す単位を明示的に作成することを選択し、また、IOleUndoUnit と IOleParentUndoUnit の両方の実装も提供した場合。