如何:为 Office 文档添加 Windows 窗体控件
在文档级项目中,可以在设计时向 Microsoft Office Excel 和 Microsoft Office Word 文档中添加 Windows 窗体控件。 在文档级自定义项和应用程序级外接程序中,可以在运行时添加控件。 例如,可以向工作表添加一个 ComboBox 控件,以便用户可从选项列表中进行选择。
**适用于:**本主题中的信息适用于以下应用程序的文档级项目和应用程序级项目:Excel 2007 和 Excel 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
本主题介绍了以下任务:
在设计时添加控件
在运行时向文档级项目中添加控件
在运行时向应用程序级外接程序中添加控件
有关相关的视频演示,请参见 How Do I: Add Controls to a Document Surface at Runtime?(如何实现:在运行时向文档图面添加控件?)。
在设计时添加控件
可通过以下几种方法在设计时向文档级项目的文档中添加 Windows 窗体控件。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
将 Windows 窗体控件拖动到文档中
在 Visual Studio 中创建或打开一个 Excel 工作簿项目或 Word 文档项目,使该文档显示在设计器中。 有关创建项目的信息,请参见如何:在 Visual Studio 中创建 Office 项目。
在**“工具箱”的“公共控件”**选项卡中单击要添加的控件,然后将它拖动到文档中。
提示
在 Excel 中选择一个控件时,“编辑栏”中将显示“=EMBED("WinForms.Control.Host","")”。 此文本是必需的,不应删除。
在文档中绘制 Windows 窗体控件
在 Visual Studio 中创建或打开一个 Excel 工作簿项目或 Word 文档项目,使该文档显示在设计器中。 有关创建项目的信息,请参见如何:在 Visual Studio 中创建 Office 项目。
在**“工具箱”的“公共控件”**选项卡中单击要添加的控件。
在文档中,单击希望控件左上角位于的位置,然后拖动到希望该控件右下角位于的位置。
控件按指定的位置和大小添加到文档中。
提示
在 Excel 中选择一个控件时,“编辑栏”中将显示“=EMBED("WinForms.Control.Host","")”。 此文本是必需的,不应删除。
通过单击控件向文档中添加 Windows 窗体控件
在 Visual Studio 中创建或打开一个 Excel 工作簿项目或 Word 文档项目,使该文档显示在设计器中。 有关创建项目的信息,请参见如何:在 Visual Studio 中创建 Office 项目。
在**“工具箱”的“公共控件”**选项卡中单击要添加的控件
在文档中单击要添加控件的位置。
控件按默认大小添加到文档中。
提示
在 Excel 中选择一个控件时,“编辑栏”中将显示“=EMBED("WinForms.Control.Host","")”。 此文本是必需的,不应删除。
通过双击控件向文档中添加 Windows 窗体控件
在 Visual Studio 中创建或打开一个 Excel 工作簿项目或 Word 文档项目,使该文档显示在设计器中。 有关创建项目的信息,请参见如何:在 Visual Studio 中创建 Office 项目。
在**“工具箱”的“公共控件”**选项卡中双击要添加的控件。
该控件被添加到文档或活动窗格的中央位置。
提示
在 Excel 中选择一个控件时,“编辑栏”中将显示“=EMBED("WinForms.Control.Host","")”。 此文本是必需的,不应删除。
通过按 Enter 键向文档中添加 Windows 窗体控件
在 Visual Studio 中创建或打开一个 Excel 工作簿项目或 Word 文档项目,使该文档显示在设计器中。 有关创建项目的信息,请参见如何:在 Visual Studio 中创建 Office 项目。
在**“工具箱”的“公共控件”**选项卡中单击要添加的控件,然后按 Enter 键。
该控件被添加到文档或活动窗格的中央位置。
提示
在 Excel 中选择一个控件时,“编辑栏”中将显示“=EMBED("WinForms.Control.Host","")”。 此文本是必需的,不应删除。
在运行时向文档级项目中添加控件
可以在运行时以编程方式向文档中添加 Windows 窗体控件。 在 Word 中,可以使用 ThisDocument 类的 Controls 属性的方法。 在 Excel 中,可以使用 Sheetn 类的 Controls 属性的方法。 每个方法都有多个重载,使用这些重载,可以按不同的方式指定控件的位置。 有关更多信息,请参见 Windows 窗体控件的帮助器方法。
如果在运行时向某个文档中添加 Windows 窗体控件,那么,在关闭该文档后,该控件将不会保留在文档中。 您可以在下次打开文档时重新创建该控件。 有关更多信息,请参见在运行时向 Office 文档添加控件。
在运行时添加 Windows 窗体控件
使用名为 Add<控件类> 的方法(其中,控件类 是要添加的 Windows 窗体控件的类名称,如 AddButton())。
下面的代码示例演示在 Excel 文档级项目中,如何向 Sheet1 的单元格**“C5”**中添加 Button。
Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Startup Dim salesButton As Microsoft.Office.Tools.Excel.Controls.Button salesButton = Me.Controls.AddButton(Me.Range("C5"), "salesButton") salesButton.Text = "Calculate Total Sales" End Sub
private void Sheet1_Startup(object sender, System.EventArgs e) { Microsoft.Office.Tools.Excel.Controls.Button salesButton; salesButton = this.Controls.AddButton(this.get_Range("C5", missing), "salesButton"); salesButton.Text = "Calculate Total Sales"; }
在运行时向应用程序级外接程序中添加控件
可以在运行时以编程方式向任何打开的文档中添加 Windows 窗体控件。 首先,生成一个基于所打开的文档或工作表的宿主项。 然后,使用新宿主项的 Document.Controls 属性的方法(在 Word 中), 或者使用新宿主项的 Worksheet.Controls 属性的方法(在 Excel 中)。 每个方法都有多个重载,使用这些重载,可以按不同的方式指定控件的位置。 有关更多信息,请参见 Windows 窗体控件的帮助器方法。
如果在运行时向某个文档中添加 Windows 窗体控件,那么,在关闭该文档后,该控件将不会保留在文档中。 您可以在下次打开文档时重新创建该控件。 有关更多信息,请参见在运行时向 Office 文档添加控件。
有关在应用程序级项目中生成宿主项的更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿。
在运行时添加 Windows 窗体控件
使用名为 Add<控件类> 的方法(其中,控件类 是要添加的 Windows 窗体控件的类名称,如 AddButton())。
提示
在面向 .NET Framework 4 的应用程序级外接程序项目中,必须先添加对 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll 或 Microsoft.Office.Tools.Word.v4.0.Utilities.dll 程序集的引用,然后才能访问 Add<控件类> 方法。
下面的代码示例演示如何使用 Word 外接程序,向活动文档的第一段中添加 Button。
Dim salesButton As Microsoft.Office.Tools.Word.Controls.Button ' Use the following line of code in projects that target the .NET Framework 4. Dim extendedDocument As Document = Globals.Factory.GetVstoObject(Me.Application.ActiveDocument) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim extendedDocument As Document = Me.Application.ActiveDocument.GetVstoObject() extendedDocument.Paragraphs(1).Range.InsertParagraphBefore() salesButton = extendedDocument.Controls.AddButton( _ extendedDocument.Paragraphs(1).Range, 75, 18, "salesButton") salesButton.Text = "Calculate Sales"
Microsoft.Office.Tools.Word.Controls.Button salesButton; // Use the following line of code in projects that target the .NET Framework 4. Document extendedDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); // In projects that target the .NET Framework 3.5, use the following line of code. // Document extendedDocument = this.Application.ActiveDocument.GetVstoObject(); extendedDocument.Paragraphs[1].Range.InsertParagraphBefore(); salesButton = extendedDocument.Controls.AddButton( extendedDocument.Paragraphs[1].Range, 75, 18, "salesButton"); salesButton.Text = "Calculate Sales";