向设计器提供撤消支持

设计器(如编辑器)通常需要支持撤消操作,以便用户可以在修改代码元素时反转其最近的更改。

在 Visual Studio 中实现的大多数设计器都由环境自动提供“撤消”支持。

需要为撤消功能提供支持的设计器实现:

有关使用 .NET Framework 编写设计器的详细信息,请参阅 扩展设计时支持

Visual Studio SDK 通过以下方式提供默认撤消基础结构:

自动获取撤消支持

在 Visual Studio 中创建的任何设计器都具有自动和完全撤消支持(如果设计器):

  • 对其用户界面使用基于的 Control 类。

  • 采用基于 CodeDOM 的标准代码生成和分析系统进行代码生成和持久性。

    有关使用 Visual Studio CodeDOM 支持的详细信息,请参阅 动态源代码生成和编译

何时使用显式设计器撤消支持

如果设计器使用图形用户界面(称为视图适配器),则它们必须提供自己的撤消管理,而不是由它们 Control提供的图形用户界面。

例如,创建具有基于 Web 的图形设计界面(而不是基于 .NET Framework 的图形界面)的产品。

在这种情况下,需要使用 Visual Studio ProvideViewAdapterAttribute注册此视图适配器并提供显式撤消管理。

如果设计器不使用名称空间中 System.CodeDom 提供的 Visual Studio 代码生成模型,则需要提供 CodeDOM 和持久性支持。

撤消设计器的支持功能

环境 SDK 提供提供撤消支持所需的接口的默认实现,这些支持可供设计者不对其用户界面或标准 CodeDOM 和持久性模型使用基于类的设计器使用 Control

OleUndoEngine 类派生自 .NET Framework UndoEngine 类,该类使用类的 IOleUndoManager 实现来管理撤消操作。

Visual Studio 为设计器撤消提供以下功能:

环境 SDK 通过提供以下方法提供 CodeDOM 和持久性支持:

使用环境 SDK 功能提供撤消支持

若要获取撤消支持,实现设计器的对象必须使用有效的IServiceProvider实现实例化和初始化类的OleUndoEngine实例。 此类 IServiceProvider 必须提供以下服务:

实现 OleUndoEngine 基于撤消机制的设计器会在以下情况下自动跟踪更改: