向设计人员提供撤销支持

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

在 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 和持久性模型的设计者。

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

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

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

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

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

设计师在实现基于 OleUndoEngine 的撤消机制时,如果满足以下条件,会自动跟踪更改: