共用方式為


使用增益集擴充表單區域

雖然不需要使用 COM 增益集就可以建立及執行具有表單區域的表單,但使用 COM 增益集可以讓表單區域包含自訂的商務邏輯或進階的功能。 不同于在標準表單中自訂表單頁面,您不會使用 VBScript 在表單後方撰寫程式碼;相反地,您會使用 COM 增益集來程式設計表單區域。 您的增益集將會實作新的介面,就是 FormRegionStartup 。 增益集將能在表單區域中使用 Microsoft Forms 2.0 控制項及 Microsoft Outlook 控制項。 本主題會說明如何實作 FormRegionStartup 及存取表單區域中的 Outlook 控制項。

指定使用增益集

當您註冊訊息類別的表單區域時,請在 Windows 登錄中為該訊息類別建立索引鍵, (如果金鑰尚未存在) ,並指定為數據, () 等號 = ,後面接著增益集的 ProgID。 如需在 Windows 登錄中註冊表單區域的詳細資訊,請參閱 在 Windows 登錄中指定表單區域

實作 FormRegionStartup

在實作您 COM 增益集之 IDTExtensibility2 介面的相同類別中,實作 Outlook.FormRegionStartup 介面,該介面是在 Outlook 型別程式庫中予以定義。 Outlook 會在此介面中呼叫四個方法:

GetFormRegionStorage

當 Outlook 即將顯示由增益集控制的表單區域時,Outlook 會呼叫 GetFormRegionStorage 方法。 當增益集收到來自 Outlook 對 GetFormRegionStorage (用於指定表單區域的資訊) 的呼叫時,增益集會傳回版面配置的資訊。 此資訊可以是配置檔案 (的本機路徑。OFS 檔案) 、Microsoft Windows IStorage 物件或含有 OFS 檔案內容的位元組陣列,可讓增益集將 OFS 儲存為資源。 Outlook 會使用傳回的資訊來產生控制項的例項並且計算表單區域的版面配置。 Outlook 也會產生表單區域之 FormRegion 物件的例項。 Microsoft Visual Basic 和 Microsoft C# 中 GetFormRegionStorage 的方法原型如下所示。

在 Visual Basic 中:

Public Function GetFormRegionStorage(ByVal FormRegionName As String,
    ByVal Item As Object, 
    ByVal LCID As Integer, 
    _ ByVal FormRegionMode As Outlook.OlFormRegionMode, 
    ByVal FormRegionSize As Outlook.OlFormRegionSize) _ 
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionStorage

在 C# 中:

public object GetFormRegionStorage(string FormRegionName, 
    object Item, 
    int LCID,
    Outlook.OlFormRegionMode FormRegionMode, 
    Outlook.OlFormRegionSize FormRegionSize) 

BeforeFormRegionShow

如果 GetFormRegionStorage 成功,在表單區域顯示在檢閱程式視窗或讀取窗格前,Outlook 會呼叫 BeforeFormRegionShow ,將 FormRegion 物件傳遞到增益集。 增益集會在顯示表單區域之前使用這個機會來更新使用者介面中的任何專案,例如變更標籤標題,如下面存 取 Outlook 控 件一節所述,以及隱藏不相關的內容。 Visual Basic 和 C# 中 BeforeFormRegionShow 的方法原型如下所示。

在 Visual Basic 中:

Public Sub BeforeFormRegionShow(ByVal Item As Object, 
    ByVal FormRegion As Microsoft.Office.Interop.Outlook.FormRegion) _ 
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.BeforeFormRegionShow

在 C# 中:

public void BeforeFormRegionShow(object Item, Outlook.FormRegion FormRegion) 

存取 Outlook 控制項

使用 COM 增益集擴充表單區域時,您通常會接聽控制項事件、呼叫控制項方法或讀取及設定控制項屬性。 若要存取 Microsoft Forms 2.0 控制項、Outlook 控制項或增益集中的表單畫布物件,您必須新增 Microsoft Forms 2.0 物件程式庫的參照。 新增此參照可以讓您存取增益集專案中的 Microsoft.Vbe.Interop.Forms 命名空間。

新增參照後,您可以選擇性地建立型別程式庫命名空間的別名,讓使用包含的類型更為容易。 若要建立別名,請在程式碼檔案的頂端插入下列程式碼。 如果您是用 Visual Basic 或 C# 撰寫增益集,下列為建立別名的範例。 在稍後的程式碼範例中也會用到這些別名。

在 Visual Basic 中:

Imports Outlook = Microsoft.Office.Interop.Outlook 
Imports Office = Microsoft.Office.Core  
Imports MSForms = Microsoft.Vbe.Interop.Forms 

在 C# 中:

using Outlook = Microsoft.Office.Interop.Outlook; 
using Office = Microsoft.Office.Core; 
using MSForms = Microsoft.Vbe.Interop.Forms; 

您可以透過從BeforeFormRegionShow取得的FormRegion物件來存取控制項。 FormRegion.Form屬性會傳回代表表單的物件;您可以將此物件轉換成MSForms.UserForm類別, (公開在 Microsoft Forms 2.0 物件程式庫中) ,以存取表單區域的表單畫布。

UserForm 物件的每個執行個體都具有 Controls 集合,此集合可以用於依控制項名稱存取 UserForm 上的個別控制項。 許多 Microsoft Forms 2.0 控制項都有已設佈景主題的對應 Outlook 控制項。 在表單區域中,Outlook 會以已設佈景主題的對應控制項來取代具有 Outlook 對應控制項的 Forms 2.0 控制項。 您從 Controls 集合取得已設佈景主題之控制項的參照後,即可將參照轉換為 Outlook 型別程式庫中的適當類別。 接著,您就可以存取 Outlook 類型程式庫中針對這些控制項公開的所有屬性、方法和事件。 不同于使用 VBScript 自訂表單,您將能夠接聽所有控制項事件,而不只是 Click 事件。 如需控制項的詳細資訊,請參閱自訂表單中的控制項

下列程式碼範例示範 BeforeFormRegionShow 方法如何使用 Outlook 的輸入參數FormRegion 來取得表單物件,然後將它轉換成 MSForms.UserForm 類別,並存取 UserForm 物件中的控制項集合。 這個 UserForm 物件所代表的表單畫布有兩個 Outlook 控制項:名為 的 OlkTextBox1 文字方塊和名為 的 OlkCheckBox1 核取方塊。 它會將這兩個控制項轉換為適當的 Outlook 控制項類型,並且設定這些控制項的預設值 (如下所示)。

在 Visual Basic 中:

Dim UserForm As MSForms.UserForm 
Dim FormControls As MSForms.Controls 
Dim TextBox1 As Outlook.OlkTextBox 
Dim CheckBox1 As Outlook.OlkCheckBox 
 
UserForm = FormRegion.Form 
FormControls = UserForm.Controls 
 
TextBox1 = FormControls.Item("OlkTextBox1") 
TextBox1.Text = "Sample Form Region" 
CheckBox1 = FormControls.Item("OlkCheckBox1") 
CheckBox1.Value = True 

在 C# 中:

MSForms.UserForm userForm = (MSForms.UserForm)FormRegion.Form; 
MSForms.Controls formControls = userForm.Controls; 
 
Outlook.OlkTextBox textBox1 =  
   (Outlook.OlkTextBox)formControls.Item("OlkTextBox1"); 
textBox1.Text = "Sample Form Region"; 
 
Outlook.OlkCheckBox checkBox1 =  
   (Outlook.OlkCheckBox)formControls.Item("OlkCheckBox1"); 
checkBox1.Value = true; 

GetFormRegionManifest

當 Outlook 啟動時,它會從 Windows 登錄中讀取表單區域清單並快取資料。 依據這項資料,如果 Outlook 注意到某個增益集是要為某表單區域提供 XML 資訊清單,Outlook 就會使用快取資料中提供的 ProgID,並呼叫由此增益集實作的 GetFormRegionManifest 方法,來取得它要顯示表單區域所需的 XML。 如果 XML 資訊清單無效,並且不符合表單區域的 XML 結構描述,Outlook 將無法載入表單區域。

如需在 Windows 登錄中登錄表單區域時指定 ProgID 的詳細資訊,請參閱在 Windows 登錄中指定表單區域

Visual Basic 和 C# 中 GetFormRegionManifest 的方法原型如下所示。

在 Visual Basic 中:

Public Function GetFormRegionManifest(ByVal FormRegionName As String, 
    ByVal LCID As Integer) _
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionManifest

在 C# 中:

public object GetFormRegionManifest(string FormRegionName, int LCID)

GetFormRegionIcon

當 Outlook 啟動時,會從 Windows 登錄中讀取一份表單區域清單,並快取與表單區域相關聯的資料。 如果表單區域已向 ProgID 註冊,Outlook 會藉由呼叫其 GetFormRegionIcon 的實作,針對 XML 資訊清單中具有 addin做為 icons 元素子項目值的任何圖示,來使用對應的增益集。 如需使用增益集指定圖示的詳細資訊,請參閱操作方法:使用增益集來指定表單區域的圖示

Visual Basic 和 C# 中 GetFormRegionIcon 的方法原型如下所示。

在 Visual Basic 中:

Public Function GetFormRegionIcon(ByVal FormRegionName As String, 
    ByVal LCID As Integer, _ 
    ByVal Icon As Outlook.OlFormRegionIcon) _ 
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionManifest 

在 C# 中:

public object GetFormRegionIcon(string FormRegionName, int LCID, Outlook.OlFormRegionIcon Icon)

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應