Office 文档上的 Windows 窗体控件的限制

添加到 Microsoft Office Word 文档或 Microsoft Office Excel 工作表的 Windows 窗体控件与添加到 Windows 窗体的 Windows 窗体控件之间存在一些差异。 例如,向文档添加 Button 控件时,属性(例如 DockAnchorTabIndex)的行为可能不会如您所期望的那样。

其中许多差异是由于 Windows 窗体控件托管在文档上的方式造成的。 将 Windows 窗体控件添加到文档时,Visual Studio Tools for Office 运行时会嵌入一个 ActiveX 控件,该控件随后将托管文档中的 Windows 窗体控件。 Windows 窗体控件不会直接嵌入到文档中。

适用于: 本主题中的信息适用于 Excel 和 Word 的文档级项目和 VSTO 外接程序项目。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能

Windows 窗体控件的方法和属性的限制

许多 Windows 窗体控件的方法和属性在文档上的工作方式与在 Windows 窗体上的工作方式不同,因此,建议不要使用它们。 例如,设置诸如 DockAnchor 的属性仅影响控件相对于容器 ActiveX 控件的位置,而不是相对于文档的位置。 下面是 Word 和 Excel 的 Windows 窗体控件不受支持的方法和属性的列表:

也不能设置 Left 与 Word 文档中的文本一致的 Windows 窗体控件或 Top 属性。 在以下情况下,Windows 窗体控件会与文本对齐添加:

  • 以编程方式将控件添加到 Word 文档,并使用指定位置范围的方法。

  • 在设计时向 Word 文档添加 Windows 窗体控件。 可以通过修改设计器中的控件来更改此项。

Office 文档中 Windows 窗体控件的差异

Windows 窗体控件在 Office 文档中的行为通常与 Windows 窗体上的行为相同,但确实存在一些差异。 下表描述了 Windows 窗体控件在 Office 文档中存在的差异。

功能性 差异
控制选项卡顺序 不能通过使用 Tab 键在 Excel 工作表或 Word 文档上的控件之间切换。
控件分组 不能使用 GroupBox 控件来包含 Office 文档上的其他控件。 将多个单选按钮直接添加到文档中时,单选按钮不相互排斥。 可以编写代码,使单选按钮互斥;但是,首选方法是将单选按钮添加到用户控件,然后将用户控件添加到文档中。 有关详细信息,请参阅 Office 开发示例和演练中的 Word 控件示例或 Excel 控件示例。
控件类型 用于文档的 Windows 窗体控件由 Visual Studio Tools for Office 运行时提供的类加以包装,为这些控件在 Excel 工作表或 Word 文档中增加了特定的附加功能。 例如,如果在 Excel 工作表上有一个 Button 控件,请确保在引用或强制转换对象时指定类型为Button而不是Button
控制位置和大小 控件的大小和位置由属于容器 ActiveX 控件的属性决定。 ActiveX 控件属性采用的值不同于 Windows 窗体控件的等效属性。 设置控件的 TopLeftHeightWidth 属性时,它们的单位是磅,而不是像素。
在 Word 文档中调整位置 如果将控件添加到基于流的布局,请记住,随着内容更改,控件将随内容一起流动。 从 工具箱 中拖动控件时,无法将控件定位到段落,因为该控件将按照文本一致添加到 Word 文档中。 如果使用另一种方法添加控件,例如双击控件,则会根据设置用于插入图片的 Word 选项插入控件。

不能设置内联文本的控件的 LeftTop 属性。

不能将控件放在页眉或页脚中,也不能放在子文档中。
控制事件 选择控件后,它会按以下顺序引发事件:

1. Enter
2. GotFocus

取消选择该控件时,会按以下顺序触发事件:

1. Leave
2. Validating
3. Validated
4. LostFocus
控制缩放 当您将文档的缩放设置更改为非100%时,控件会被禁用,但看起来会随文档一起缩放。 例如,如果文档在 130% 缩放时单击某个按钮,则会显示控件已禁用的消息,直到缩放设置为 100%。 将缩放更改为 100%时,控件将正常工作。
控件属性值 尽管 Windows 窗体上的控件的属性设置为整数值,但它们设置为 Word 文档中的控件的单个属性。 在 Excel 中,控件的属性值设置为双精度值。 如果工作表上的控件的HeightWidth属性超过工作表或屏幕的大小,那么其值将被截断。
控制尺寸调整 如果使用八个大小控点之一调整文档上的控件大小,则在重新选择控件之前,新控件维度不会反映在 “属性” 窗口中。
控制行为 当拆分工作表窗口时,Excel 工作表上的控件的行为可能不可预知。 例如,可能仅在其中一个窗口中才能访问工作表上的TextBox
控件命名 不能使用保留字来命名控件。 例如,如果将 a Button 添加到工作表并将名称更改为 “系统”,则生成项目时会发生错误。
以编程方式添加控件 不要使用控件的构造函数在运行时向文档添加控件。 改用 Visual Studio Tools for Office 运行时提供的辅助方法。 例如,使用 AddButton 该方法向工作表添加按钮。 如果要添加这些帮助程序方法不支持的控件,可以使用该方法 AddControl 。 有关详细信息,请参阅 运行时向 Office 文档添加控件
复制控件 如果复制 Windows 窗体控件并在运行时将其粘贴到文档中,则会将空容器 ActiveX 控件粘贴到文档中。 Windows 窗体控件不会显示在新位置,原始控件背后的代码不会复制到容器 ActiveX 控件。

文档级项目中的限制

对文档使用 Windows 窗体控件的一些限制对文档级项目是唯一的。

设计时控制支持

当 Excel 工作表或 Word 文档在 Visual Studio 设计器中打开时,某些 Windows 窗体控件将从 工具箱 中删除。 这是因为技术限制或 Word 或 Excel 中已提供该功能。 Excel 和 Word 项目支持当文档具有焦点时出现在 工具箱 中的所有 Windows 窗体控件和其他组件,还可以将第三方控件添加到工作表或文档。

注释

当文档受到保护时,将从 工具箱 中删除所有控件。 有关文档保护的信息,请参阅 文档级解决方案中的文档保护

注释

第三方控件必须将 ComVisibleAttribute 属性设置为 true 才能在 Office 解决方案中使用。

工具箱中不提供以下控件和组件:

对旧版 ActiveX 控件的支持

如果创建使用现有 Word 文档或包含 ActiveX 控件的 Excel 工作簿的文档级 Office 项目,则 ActiveX 控件的功能不会丢失;但是,不支持从 Visual Studio 中向文档添加新的 ActiveX 控件。 例如,如果 Word 文档具有运行 Visual Basic for Applications(VBA)宏的 控件 工具箱中的按钮,它将在 Office 项目中使用文档后继续运行宏。 但是,建议删除 ActiveX 控件和 VBA 宏,并将其替换为 Windows 窗体控件和托管代码。