雖然不需要使用 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 屬性回傳一個代表表單的物件;你可以將此物件投射到 Microsoft Forms 2.0 物件庫中公開的 MSForms.UserForm 類別) (以存取該表單區域的表單畫布。
UserForm 物件的每個執行個體都具有 Controls 集合,此集合可以用於依控制項名稱存取 UserForm 上的個別控制項。 許多 Microsoft Forms 2.0 控制項都有已設佈景主題的對應 Outlook 控制項。 在表單區域中,Outlook 會以已設佈景主題的對應控制項來取代具有 Outlook 對應控制項的 Forms 2.0 控制項。 您從 Controls 集合取得已設佈景主題之控制項的參照後,即可將參照轉換為 Outlook 型別程式庫中的適當類別。 接著你就能在 Outlook 類型庫中存取這些控制項的所有屬性、方法和事件。 與使用 VBScript 自訂表單不同,你將能監聽所有控制事件,而不僅限於 點擊 事件。 如需控制項的詳細資訊,請參閱自訂表單中的控制項。
以下程式碼範例展示了 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子元素值的圖示進行相應外掛。 如需使用增益集指定圖示的詳細資訊,請參閱操作方法:使用增益集來指定表單區域的圖示。
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 支援與意見反應。