宿主项和宿主控件概述

更新: 2008 年 7 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

文档级项目

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

应用程序级项目

  • Excel 2007

  • Word 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

宿主项和宿主控件是帮助为 Visual Studio Tools for Office 解决方案提供编程模型的类。它们使得与基于 COM 的 Microsoft Office Word 和 Microsoft Office Excel 的对象模型进行交互更像与托管对象(如 Windows 窗体控件)进行交互。

宿主项

宿主项是 Visual Studio Tools for Office 项目中位于对象模型层次结构顶层的类。Visual Studio Tools for Office 为 Word 和 Excel 解决方案定义以下宿主项:

其中的每个类都扩展一个本身存在于 Word 或 Excel 对象模型中的类(称为“本机 Office 对象”)。例如,Microsoft.Office.Tools.Word.Document 宿主项扩展 Microsoft.Office.Interop.Word.Document 类,该类在 Word 的主互操作程序集内定义。

宿主项通常与对应的 Office 对象具有相同的基本功能,但是它们具有以下增强功能:

  • 能够承载托管控件(包括宿主控件和 Windows 窗体控件)。

  • 事件模型更加丰富。本机 Word 和 Excel 对象模型中的某些文档、工作簿和工作表事件仅在应用程序级引发。宿主项在文档级提供这些事件,这样更便于处理特定文档的事件。

了解文档级项目中的宿主项

在文档级项目中,宿主项为代码提供入口点,而且具有可帮助您开发解决方案的设计器。

Microsoft.Office.Tools.Word.DocumentMicrosoft.Office.Tools.Excel.Worksheet 宿主项拥有的设计器是文档或工作表的可视化表示形式,与 Windows 窗体设计器相似。使用此设计器,可以直接在 Word 或 Excel 中修改文档或工作表的内容,还可以将控件拖到设计图面上。有关更多信息,请参见文档宿主项工作表宿主项

Microsoft.Office.Tools.Excel.Workbook 宿主项不充当具有用户界面的控件的容器。此宿主项的设计器充当一个组件栏,使您能够将诸如 DataSet 这样的组件拖到它的设计图面上。有关更多信息,请参见工作簿宿主项

在文档级项目中,不能以编程方式创建宿主项。请改用 Visual Studio Tools for Office 在设计时自动在项目中生成的 ThisDocument、ThisWorkbook 或 Sheetn 类。所生成的这些类派生自宿主项类,它们为您的代码提供入口点。有关更多信息,请参见宿主项和宿主控件的编程限制

了解应用程序级项目中的宿主项

默认情况下,当您创建应用程序级外接程序时,您无权访问任何宿主项。但是,从 Visual Studio 2008 Service Pack 1 (SP1) 开始,您可以在运行时在外接程序中生成 Microsoft.Office.Tools.Word.DocumentMicrosoft.Office.Tools.Excel.WorkbookMicrosoft.Office.Tools.Excel.Worksheet 宿主项。

生成宿主项之后,可以执行多项任务,例如,向文档中添加控件以及创建能够在特定文档中识别的智能标记。有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿

宿主控件

宿主控件扩展 Word 和 Excel 对象模型中的各个用户界面 (UI) 对象,例如 Microsoft.Office.Interop.Word.ContentControlMicrosoft.Office.Interop.Excel.Range 对象。

对于 Excel 项目,可以使用以下宿主控件:

对于 Word 项目,可以使用以下宿主控件:

添加到 Office 文档中的宿主控件的行为与本机 Office 对象的行为类似;但宿主控件还拥有其他功能,包括事件和数据绑定功能。例如,要捕获 Excel 中本机 Microsoft.Office.Interop.Excel.Range 对象的事件,必须首先处理工作表的更改事件。然后必须确定 Microsoft.Office.Interop.Excel.Range 中是否发生了更改。相反,Microsoft.Office.Tools.Excel.NamedRange 宿主控件具有可直接处理的 Change 事件。

宿主项和宿主控件之间的关系与 Windows 窗体和 Windows 窗体控件之间的关系非常相似。就像在 Windows 窗体上放置文本框控件一样,您可以在 Microsoft.Office.Tools.Excel.Worksheet 宿主项上放置 Microsoft.Office.Tools.Excel.NamedRange 控件。下图显示了宿主项和宿主控件之间的关系。

宿主项与宿主控件之间的关系

此外,Visual Studio Tools for Office 还允许将 Windows 窗体控件直接添加到 Word 和 Excel 文档图面中,从而使您可以在 Office 解决方案中使用 Windows 窗体控件。有关更多信息,请参见 Office 文档上的 Windows 窗体控件概述

说明:

不支持向 Word 子文档添加宿主控件或 Windows 窗体控件。

将宿主控件添加到文档中

在文档级项目中,可以按照以下方式在设计时向 Word 文档或 Excel 工作表中添加宿主控件:

  • 采用与添加本机对象相同的方式,在设计时向文档中添加宿主控件。

  • 将宿主控件从“工具箱”拖到文档和工作表上。Excel 宿主控件可从 Excel 项目的“Excel 控件”选项卡中得到,而 Word 宿主控件可在 Word 项目的“Word 控件”选项卡中得到。

  • 将宿主控件从“数据源”窗口拖到文档和工作表上。这样,您将能够添加已与数据绑定的控件。有关更多信息,请参见将数据绑定到控件

在文档级项目以及从 SP1 开始的应用程序级项目中,还可以在运行时向文档中添加一些宿主控件。有关更多信息,请参见在运行时向 Office 文档添加控件

有关如何向文档中添加宿主控件的更多信息,请参见以下主题:

为宿主控件命名

将某个宿主控件从“工具箱”拖到文档中时,该控件将自动用控件类型来命名,末尾带有递增的编号。例如,书签将命名为 Bookmark1、Bookmark2,依此类推。如果使用 Word 或 Excel 的本机功能添加控件,则可以在创建控件时为控件指定特定的名称。还可以通过在“属性”窗口中更改“Name”属性的值来重命名控件。

说明:

不能使用保留字命名宿主控件。例如,如果将 NamedRange 控件添加到工作表,并将名称更改为“System”,生成项目时就会发生错误。

删除宿主控件

在文档级项目中,在 Excel 工作表或 Word 文档中选择控件并按 Delete 键,便可在设计时删除宿主控件。但是,必须在 Excel 中使用“定义名称”对话框删除 NamedRange 控件。有关更多信息,请参见如何:在设计时删除 NamedRange 控件

如果在设计时向文档添加宿主控件,则不应在运行时以编程方式移除该控件,因为下次尝试在代码中使用此控件时会引发异常。宿主控件的 Delete 方法只移除在运行时向文档中添加的宿主控件。如果调用在设计时创建的宿主控件的 Delete 方法,就会引发异常。

例如,NamedRangeDelete 方法只能成功地删除以编程方式添加到工作表中(称为动态创建宿主控件)的 NamedRange。也可以通过将控件名传递给 Worksheet.ControlsDocument.Controls 属性的 Remove 方法,来移除动态创建的宿主控件。有关更多信息,请参见在运行时向 Office 文档添加控件

如果最终用户在运行时从文档中删除一个宿主控件,解决方案可能会以意想不到的方式失败。可以在 Word 和 Excel 中使用文档保护功能,以使宿主控件不被删除。有关更多信息,请参见 Word 文档保护技术示例Excel 文档保护技术示例

说明:

请不要在文档或工作表的 Shutdown 事件处理程序执行期间以编程方式移除控件。当 Shutdown 事件发生时,UI 元素不再可用。如果要在应用程序关闭之前移除控件,请将代码添加到另一个事件处理程序中,如 BeforeClose 或 BeforeSave。

针对宿主控件事件编程

宿主控件扩展 Office 对象的方法之一是添加事件。例如,Excel 中的 Microsoft.Office.Interop.Excel.Range 对象和 Word 中的 Microsoft.Office.Interop.Word.Bookmark 对象没有事件,但是 Visual Studio Tools for Office 通过添加可编程事件扩展了这些对象。您可以访问这些事件并针对这些事件进行编码,其方式与访问 Windows 窗体上的控件事件的方式相同:即通过 Visual Basic 中的事件下拉列表和 C# 中的事件属性页。有关更多信息,请参见演练:根据 NamedRange 控件的事件进行编程

说明:

不应将 Excel 中 Application 对象的 EnableEvents 属性设置为 false。将此属性设置为 false 将阻止 Excel 引发任何事件,包括宿主控件的事件。

请参见

概念

内容控件

将数据绑定到控件

宿主项和宿主控件的编程限制

其他资源

Word 宿主控件

Excel 宿主控件

Office 文档上的控件

修订记录

日期

修订历史记录

原因

2008 年 7 月

增加了有关在应用程序级外接程序中使用宿主项和宿主控件的信息。

SP1 功能更改。