Visual Studio 中的 Office 開發工具提供類別和設計工具,當您使用它們在 VSTO 增益集中建立自訂工作窗格、功能區自訂和 Outlook 表單區域時,會處理許多實作詳細資料。 不過,如果您有特殊需求,也可以自行實作每個功能的 擴充性介面 。
適用於: 本主題中的資訊適用於 VSTO 增益集專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能。
Microsoft Office 會定義一組擴充性介面,COM VSTO 增益集可以實作這些介面來自訂某些功能,例如功能區。 這些介面提供對它們所提供存取的功能的完全控制。 不過,實作這些介面需要一些在受管理的程式碼中使用 COM 互通性的知識。 在某些情況下,這些介面的程式設計模型對於習慣 .NET Framework 的開發人員來說也不直觀。
當您使用 Visual Studio 中的 Office 專案範本建立 VSTO 增益集時,您不需要實作擴充性介面來自訂功能區等功能。 Visual Studio Tools for Office 執行階段會為您實作這些介面。 相反地,您可以使用 Visual Studio 提供的更直覺式類別和設計工具。 不過,如果您願意,您仍然可以直接在 VSTO 增益集中實作擴充性介面。
如需 Visual Studio 為這些功能提供的類別和設計工具的詳細資訊,請參閱 自訂工作窗格、 功能區設計工具和 建立 Outlook 表單區域。
您可以在 VSTO 增益集中實作的擴充性介面
下表列出您可以實作的擴充性介面,以及支援這些介面的應用程式。
| 介面 | Description | 應用程式 |
|---|---|---|
| IRibbonExtensibility | 實作此介面以自訂功能區 UI。 注意: 您可以將 功能區(XML) 項目新增至專案,以在 VSTO 增益集中產生預設 IRibbonExtensibility 實現。 如需更多資訊,請查看Ribbon XML。 | Excel InfoPath 2013 InfoPath 2010 展望 簡報軟體 隨附此逐步解說的專案 Visio Word |
| ICustomTaskPaneConsumer | 實作此介面以建立自訂工作窗格。 | Excel 展望 簡報軟體 Word |
| FormRegionStartup | 實作此介面以建立 Outlook 表單區域。 | 展望 |
Microsoft Office 還定義了數個其他擴充性介面,例如 IBlogExtensibility、 和 EncryptionProviderSignatureProvider。 Visual Studio 不支援在使用 Office 專案範本建立的 VSTO 增益集中實作這些介面。
使用擴充性介面
若要使用擴充性介面自訂 UI 功能,請在 VSTO 增益集專案中實作適當的介面。 然後,覆寫 RequestService 方法,讓它傳回一個實作該介面的類別的實例。
如需示範如何在 Outlook 的 VSTO 增益集中實作 IRibbonExtensibility、ICustomTaskPaneConsumer 和 FormRegionStartup 介面的範例應用程式,請參閱 Office 開發範例中的 UI 管理範例。
實作擴充性介面的範例
下列程式碼範例示範介面的 ICustomTaskPaneConsumer 簡單實作,以建立自訂工作窗格。 此範例定義兩個類別:
類別
TaskPaneHelper實作 ICustomTaskPaneConsumer 以建立並顯示自訂工作窗格。類別
TaskPaneUI提供工作窗格的 UI。 類別的TaskPaneUI屬性會讓類別對 COM 可見,這可讓 Microsoft Office 應用程式探索類別。 在此範例中,UI 是空的 UserControl,但您可以修改程式碼來新增控制項。備註
若要將
TaskPaneUI類別公開給 COM,您也必須設定專案的 Register for COM Interop 屬性。public class TaskPaneHelper : Office.ICustomTaskPaneConsumer { internal Office.CustomTaskPane taskPane; public void CTPFactoryAvailable(Office.ICTPFactory CTPFactoryInst) { if (CTPFactoryInst != null) { // Create a new task pane. taskPane = CTPFactoryInst.CreateCTP( "Microsoft.Samples.Vsto.CS.TaskPaneUI", "Contoso"); taskPane.Visible = true; } } } [System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.CS.TaskPaneUI")] [System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")] public class TaskPaneUI : UserControl { }
如需實作 ICustomTaskPaneConsumer的詳細資訊,請參閱 Microsoft Office 文件中的在 2007 Office system 中建立自訂工作窗格 。
覆寫 RequestService 方法的範例
下列程式碼範例示範如何覆寫 RequestService 方法,以傳回上一個程式碼範例中類別 TaskPaneHelper 的實例。 它會檢查 serviceGuid 參數的值,以判斷所要求的介面,然後傳回實作該介面的物件。
internal TaskPaneHelper taskPaneHelper1;
protected override object RequestService(Guid serviceGuid)
{
if (serviceGuid == typeof(Office.ICustomTaskPaneConsumer).GUID)
{
if (taskPaneHelper1 == null)
{
taskPaneHelper1 = new TaskPaneHelper();
}
return taskPaneHelper1;
}
return base.RequestService(serviceGuid);
}