宿主项和宿主控件概述
更新: 2008 年 7 月
适用于 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 文档级项目
应用程序级项目
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
宿主项和宿主控件是帮助为 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.Document 和 Microsoft.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.Document、Microsoft.Office.Tools.Excel.Workbook 和 Microsoft.Office.Tools.Excel.Worksheet 宿主项。
生成宿主项之后,可以执行多项任务,例如,向文档中添加控件以及创建能够在特定文档中识别的智能标记。有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿。
宿主控件
宿主控件扩展 Word 和 Excel 对象模型中的各个用户界面 (UI) 对象,例如 Microsoft.Office.Interop.Word.ContentControl 和 Microsoft.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 方法,就会引发异常。
例如,NamedRange 的 Delete 方法只能成功地删除以编程方式添加到工作表中(称为动态创建宿主控件)的 NamedRange。也可以通过将控件名传递给 Worksheet.Controls 或 Document.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 引发任何事件,包括宿主控件的事件。 |
请参见
概念
其他资源
修订记录
日期 |
修订历史记录 |
原因 |
---|---|---|
2008 年 7 月 |
增加了有关在应用程序级外接程序中使用宿主项和宿主控件的信息。 |
SP1 功能更改。 |