デザイナー向けの元に戻す操作のサポートを提供する

通常、エディターと同様に、デザイナーではコード要素を変更するときにユーザーが最新の変更を元に戻すことができるように、元に戻す操作をサポートする必要があります。

Visual Studio で実装されているほとんどのデザイナーには、環境によって自動的に提供される "元に戻す" 操作のサポートがあります。

元に戻す機能のサポートを提供する必要があるデザイナーの実装は次のとおりです。

.NET Framework を使用したデザイナーの作成の詳細については、「デザイン時のサポートの拡張」を参照してください。

Visual Studio SDK から、次のように既定の元に戻す操作のインフラストラクチャが提供されます。

元に戻す操作のサポートを自動的に取得する

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 では、デザイナーの元に戻す操作のための次の機能が用意されています。

環境 SDK では、次のように指定することで、CodeDOM および永続化をサポートしています。

環境 SDK 機能を使用して元に戻す操作のサポートを提供する

元に戻す操作のサポートを取得するには、デザイナーを実装するオブジェクトで、有効な IServiceProvider の実装を使用して OleUndoEngine クラスのインスタンスをインスタンス化し、初期化する必要があります。 この IServiceProvider クラスは、次のサービスを提供する必要があります。

OleUndoEngine ベースの元に戻すメカニズムを実装するデザイナーでは、次の場合に変更が自動的に追跡されます。

  • プロパティの変更が、TypeDescriptor オブジェクトを使用して行われた場合。

  • IComponentChangeService イベントが、元に戻すことが可能な変更がコミットされると、手動で生成された場合。

  • デザイナーでの変更が、DesignerTransaction のコンテキスト内で作成された場合。

  • デザイナーで、UndoEngine.UndoUnit の実装によって提供される標準の元に戻す操作ユニット、または UndoEngine.UndoUnit から派生した Visual Studio 固有の実装 OleUndoEngine.UndoUnit のいずれかを使用して、元に戻す単位を明示的に作成することを選択し、また、IOleUndoUnitIOleParentUndoUnit の両方の実装も提供した場合。