您可以在執行階段將控制項新增至 Microsoft Office Word 文件和 Microsoft Office Excel 活頁簿。 您也可以在執行階段移除它們。 您在執行階段新增或移除的控制項稱為 動態控制項。
適用於: 本主題中的資訊適用於 Excel 和 Word 的文件層級專案和 VSTO 增益集專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能。
本主題說明下列內容:
使用控制項集合在執行階段管理控制項
若要在執行階段新增、取得或移除控制項,請使用 和 ControlCollection 物件的ControlCollection協助程式方法。
您存取這些物件的方式取決於您正在開發的專案類型:
在 Excel 的文件層級專案中,使用 Controls 、
Sheet1和Sheet2類別的Sheet3屬性。 如需這些類別的詳細資訊,請參閱 工作表主機項目。在 Word 的文件層級專案中,使用 Controls 類別的
ThisDocument屬性。 如需此類別的詳細資訊,請參閱 文件主機項目。在 Excel 或 Word 的 VSTO 增益集專案中,使用您在執行階段產生的 Worksheet 或 Document 的
Controls屬性。 如需在執行階段產生這些物件的詳細資訊,請參閱 在執行階段擴充 VSTO 增益集中的 Word 文件和 Excel 活頁簿。
新增控制項
ControlCollection和ControlCollection類型包含協助程式方法,可用來將主機控制項和一般 Windows Forms 控制項新增至文件和工作表。 每個方法名稱都有格式 Add控制項類別,其中 控制項類別 是您要新增之控制項的類別名稱。 例如,若要將控制項新增至 NamedRange 文件,請使用 方法 AddNamedRange 。
以下程式碼範例會在 Excel 的文件層級專案中,將 NamedRange 新增到 Sheet1。
Excel.Range range1 = Globals.Sheet1.Range["A1", "D5"];
Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource");
存取和刪除控制項
您可以使用 Controls 或 WorksheetDocument 的屬性來逐一查看文件中的所有控制項,包括您在設計階段新增的控制項。 您在設計階段新增的控制項也稱為 靜態控制項。
您可以呼叫 Delete 控制項的方法,或呼叫 Remove 每個 Controls 集合的方法,以移除動態控制項。 下列程式碼範例使用Remove方法,從 Excel 的文件層級專案中移除一個NamedRangeSheet1。
您無法在執行階段移除靜態控制項。 如果您嘗試使用Delete或Remove方法來移除靜態控制項,系統會拋出CannotRemoveControlException。
備註
請勿以程式設計方式移除文件事件處理常式中的 Shutdown 控制項。 當 Shutdown 事件引發時,文件的 UI 元素將不再可用。 如果您想要在文件關閉之前移除控制項,請將程式碼新增至另一個事件的事件處理常式,例如 BeforeClose Word 的 或 BeforeSave ,或 BeforeCloseExcel 的 。BeforeSave
將主機控制項新增至文件
當您以程式設計方式將主機控制項新增至文件時,您必須提供唯一識別控制項的名稱,而且您必須指定在文件上新增控制項的位置。 如需特定指示,請參閱下列主題:
如需主機控制項的詳細資訊,請參閱 主機項目和主機控制項概觀。
儲存文件然後關閉時,所有動態建立的主機控制項都會與其事件中斷連線,並失去其資料繫結功能。 您可以將程式碼新增至解決方案,以便在重新開啟文件時重新建立主機控制項。 如需詳細資訊,請參閱 在 Office 文件中保存動態控制項。
備註
未針對下列主機控制項提供協助程式方法,因為這些控制項無法以程式設計方式新增至檔 XmlMappedRange:、 XMLNode和 XMLNodes。
將 Windows Forms 控制項新增至文件
當您以程式設計方式將 Windows Forms 控制項新增至文件時,您必須提供控制項的位置,以及唯一識別控制項的名稱。 Visual Studio Tools for Office 執行階段會為每個控制項提供協助程式方法。 這些方法會重載,因此您可以傳遞控制項位置的範圍或特定座標。
儲存文件然後關閉時,所有動態建立的 Windows Forms 控制項都會從文件中移除。 您可以將程式碼新增至解決方案,以在重新開啟文件時重新建立控制項。 如果您使用 VSTO 增益集建立動態 Windows Forms 控制項,控制項的 ActiveX 包裝函式會保留在文件中。 如需詳細資訊,請參閱 在 Office 文件中保存動態控制項。
備註
Windows Forms 控制項無法以程式設計方式新增至受保護的文件。 如果您以程式設計方式取消保護 Word 文件或 Excel 工作表以新增控制項,則必須撰寫其他程式碼,以在關閉文件時移除控制項的 ActiveX 包裝函式。 控制項的 ActiveX 包裝函式不會自動從受保護的文件中刪除。
新增自訂控制項
如果您想要新增一個不受可用協助程式方法支援的項目,例如Control自訂使用者控制項,請使用下列方法:
若為 Excel,請使用 AddControl 物件的其中一個 ControlCollection 方法。
針對 Word,請使用ControlCollection物件的AddControl方法之一。
為了新增控制項,請將控制項、控制項的位置,以及唯一識別控制項的名稱傳遞給
AddControl方法。 此AddControl方法會傳回物件,以定義控制項如何與工作表或文件互動。 該AddControl方法返回一個 ControlSite (對於 Excel)或一個 ControlSite 對象(對於 Word)。下列程式碼範例示範如何使用方法 AddControl ,將自訂使用者控制項動態新增至文件層級 Excel 專案中的工作表。 在此範例中,使用者控制項名為
UserControl1,而 的名稱 Range 為range1。 若要使用此範例,請從專案中的Sheetn類別執行。
在自訂控制項中使用成員
使用其中 AddControl 一種方法將控制項新增至工作表或文件之後,您現在有兩個不同的控制項物件:
代表自訂控制項的 Control。
ControlSite、OLEObject或OLEControl代表控制項在新增至工作表或文件後的物件。許多屬性和方法會在這些控制項之間共用。 請務必透過適當的控制項存取這些成員:
若要存取只屬於自訂控制項的成員,請使用 Control。
若要存取控制項共用的成員,請使用
ControlSite、OLEObject或OLEControl物件。如果您從 Control存取共用成員,則可能會失敗而沒有警告或通知,或產生無效的結果。 一律使用
ControlSite、OLEObject或OLEControl物件的方法或屬性,除非所需的方法或屬性無法使用,這時才應參考 Control。例如,ControlSite類別和Control類別都有
Top屬性。 若要取得或設定控制項頂端與文件頂端之間的距離,請使用ControlSite的Top屬性,而不是Control的Top屬性。