创建自定义编辑器和设计器

Visual Studio 集成开发环境(IDE)可以托管不同类型的编辑器:

  • Visual Studio 核心编辑器

  • 自定义编辑器

  • 外部编辑器

  • 设计器

以下信息可帮助你选择所需的编辑器类型。

编辑器类型

有关 Visual Studio 核心编辑器的信息,请参阅 扩展编辑器和语言服务

自定义编辑器

自定义编辑器是一种设计用于在特殊情况下工作的编辑器。 例如,可以创建一个编辑器,其函数是读取数据并将其写入特定存储库,例如 Microsoft Exchange 服务器。 如果希望仅对项目类型使用编辑器,或者希望只有几个特定命令的编辑器,请选择自定义编辑器。 但是,请注意,用户将无法使用自定义编辑器编辑标准 Visual Studio 项目。

自定义编辑器可以使用编辑器工厂并将有关编辑器的信息添加到注册表。 但是,与自定义编辑器关联的项目类型可以通过其他方式实例化自定义编辑器。

自定义编辑器可以使用就地激活或简化的嵌入来实现视图。

外部编辑器

外部编辑器是未集成到 Visual Studio 中的编辑器,例如 Microsoft Word、记事本 或 Microsoft FrontPage。 例如,如果要从 VSPackage 将文本传递给该编辑器,则可以调用此类编辑器。 外部编辑器自行注册,可在 Visual Studio 外部使用。 调用外部编辑器时,它可以嵌入在主机窗口中,然后在 IDE 的窗口中显示它。 否则,IDE 会为其创建单独的窗口。

该方法 IsDocumentInProject 使用 VSDOCUMENTPRIORITY 枚举设置文档优先级。 DP_External如果指定了该值,则可以由外部编辑器打开该文件。

编辑器设计决策

以下设计问题将帮助你选择最适合应用程序的编辑器类型:

  • 应用程序是否会将其数据存储在文件中? 如果它将将数据保存在文件中,它们是否采用自定义格式或标准格式?

    如果使用标准文件格式,除了项目之外,其他项目类型将能够打开和读取/写入数据。 但是,如果使用自定义文件格式,则只有项目类型才能打开和读取/写入数据。

    如果项目使用文件,则应自定义标准编辑器。 如果项目不使用文件,而是使用数据库或其他存储库中的项,则应创建自定义编辑器。

  • 编辑器是否需要托管 ActiveX 控件?

    如果编辑器托管 ActiveX 控件,则实现就地激活编辑器,如就地激活中所述。 如果它不托管 ActiveX 控件,请使用简化的嵌入编辑器,或自定义 Visual Studio 默认编辑器。

  • 编辑器是否支持多个视图? 如果希望编辑器的视图与默认编辑器同时可见,则必须支持多个视图。

    如果编辑器需要支持多个视图,则编辑器的文档数据和文档视图对象必须是单独的对象。 有关详细信息,请参阅 “支持多个文档视图”。

    如果编辑器支持多个视图,是否计划对文档数据对象使用 Visual Studio 核心编辑器的文本缓冲区实现(VsTextBuffer 对象)? 也就是说,是否支持编辑器视图与 Visual Studio 核心编辑器并排? 执行此操作的能力是表单设计器的基础。

  • 如果需要托管外部编辑器,是否可以在 Visual Studio 中嵌入编辑器?

    如果可以嵌入,则应为外部编辑器创建主机窗口,然后调用IsDocumentInProject该方法并将枚举值DP_External设置为 VSDOCUMENTPRIORITY 。 如果无法嵌入编辑器,IDE 将自动为其创建单独的窗口。

本节内容

演练:创建自定义编辑器
介绍如何创建自定义编辑器。

演练:向自定义编辑器添加功能
介绍如何向自定义编辑器添加功能。

设计器初始化和元数据配置
说明如何初始化设计器。

向设计器提供撤消支持
介绍如何为设计器提供撤消支持。

自定义编辑器中的语法着色
介绍核心编辑器和自定义编辑器中的语法着色之间的差异。

自定义编辑器中的文档数据和文档视图
介绍如何在自定义编辑器中实现文档数据和文档视图。