使用擴充性介面自訂 UI 功能
更新:2007 年 11 月
適用於 |
---|
本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。 專案類型
Microsoft Office 版本
如需詳細資訊,請參閱依應用程式和專案類型提供的功能。 |
Visual Studio Tools for Office 所提供的類別 (Class) 與設計工具可在您用來建立應用程式層級增益集的自訂工作窗格、功能區自訂與 Outlook 表單區域時,協助您處理掉許多實作 (Implementation) 細節。但是,如果您有特別需要,也可以自行為每一項功能實作「擴充性介面」(Extensibility Interface)。
擴充性介面概觀
2007 Microsoft Office system 中的應用程式定義了一組擴充性介面,可供 COM 增益集實作來自訂特定使用者介面 (UI) 功能。Visual Studio Tools for Office 會簡化這個程序,它會為您實作這些介面,並提供一些類別與設計工具供您使用。但是,您也可以直接在增益集中實作擴充性介面。
如需 Visual Studio Tools for Office 針對這些功能所提供的類別與設計工具詳細資訊,請參閱自訂工作窗格概觀、功能區設計工具和建立 Outlook 表單區域。
可在增益集中實作的擴充性介面
下表列出您可實作的擴充性介面以及支援這些介面的應用程式。
介面 |
說明 |
應用程式 |
---|---|---|
Microsoft.Office.Core.IRibbonExtensibility |
實作這個介面可以自訂功能區 UI。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 IRibbonExtensibility 物件。
注意事項:
您可以將 [功能區 (XML)] 項目加入至專案以在增益集中產生預設的 Microsoft.Office.Core.IRibbonExtensibility 實作。如需詳細資訊,請參閱功能區 XML。
|
Excel 2007 InfoPath 2007 Outlook 2007 PowerPoint 2007 Word 2007 |
Microsoft.Office.Core.ICustomTaskPaneConsumer |
實作這個介面可以建立自訂工作窗格。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 ICustomTaskPaneConsumer 物件。 |
Excel 2007 Outlook 2007 PowerPoint 2007 Word 2007 |
Microsoft.Office.Interop.Outlook.FormRegionStartup |
實作這個介面可以建立 Outlook 表單區域。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 FormRegionStartup 介面。 |
Outlook 2007 |
2007 Microsoft Office system 的應用程式還定義了其他好幾種擴充性介面,例如 Microsoft.Office.Core.IBlogExtensibility、Microsoft.Office.Core.EncryptionProvider 和 Microsoft.Office.Core.SignatureProvider。Visual Studio Tools for Office 不支援在增益集中實作這些介面。
使用擴充性介面
若要使用擴充性介面來實作 UI 功能,請在您的增益集專案中實作適當的介面。接著,覆寫 RequestService 方法以傳回會實作這個介面的類別執行個體 (Instance)。
如需示範如何在 Excel 增益集中實作 Microsoft.Office.Core.IRibbonExtensibility 和 Microsoft.Office.Core.ICustomTaskPaneConsumer 介面的範例應用程式,請參閱執行階段服務範例。
擴充性介面的實作範例
下列程式碼範例示範 Microsoft.Office.Core.ICustomTaskPaneConsumer 介面的簡單實作,以建立自訂工作窗格。這個範例會定義兩個類別:
TaskPaneHelper 類別會實作 Microsoft.Office.Core.ICustomTaskPaneConsumer 以建立和顯示自訂工作窗格。
TaskPaneUI 類別會提供工作窗格的 UI。TaskPaneUI 類別的屬性 (Attribute) 會讓 COM 得知這個類別,進而使 Microsoft Office 應用程式發現這個類別。在這個範例中,UI 是一個空的 UserControl,但是您可以藉由修改程式碼來加入控制項。
注意事項: 若要將 TaskPaneUI 類別公開 (Expose) 至 COM,您必須同時設定專案的 [註冊 COM Interop] 屬性 (Property)。如需詳細資訊,請參閱 HOW TO:註冊 COM Interop 元件。
Public Class TaskPaneHelper
Implements Office.ICustomTaskPaneConsumer
Friend taskPane As Office.CustomTaskPane
Public Sub CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICTPFactory) _
Implements Office.ICustomTaskPaneConsumer.CTPFactoryAvailable
If CTPFactoryInst IsNot Nothing Then
' Create a new task pane.
taskPane = CTPFactoryInst.CreateCTP( _
"Microsoft.Samples.Vsto.VB.TaskPaneUI", "Contoso")
taskPane.Visible = True
End If
End Sub
End Class
<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.VB.TaskPaneUI")> _
<System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")> _
Public Class TaskPaneUI
Inherits UserControl
End Class
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", Type.Missing);
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
{
}
如需實作 Microsoft.Office.Core.ICustomTaskPaneConsumer 的詳細資訊,請參閱 2007 Microsoft Office 文件中的在 2007 Office System 中建立自訂工作窗格。
RequestService 方法的覆寫範例
下列程式碼範例示範如何覆寫 RequestService 方法以從上一個程式碼範例中傳回 TaskPaneHelper 類別的執行個體。它會檢查 serviceGuid 參數的值以判斷要求的擴充性介面為何,然後傳回實作該介面的物件。
Friend taskPaneHelper1 As TaskPaneHelper
Protected Overrides Function RequestService( _
ByVal serviceGuid As Guid) As Object
If (serviceGuid = GetType(Office.ICustomTaskPaneConsumer).GUID) Then
If (taskPaneHelper1 Is Nothing) Then
taskPaneHelper1 = New TaskPaneHelper()
End If
Return taskPaneHelper1
End If
Return MyBase.RequestService(serviceGuid)
End Function
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);
}
請參閱
工作
HOW TO:建立 Visual Studio Tools for Office 專案