フォーム領域をアドインで拡張する

フォーム領域を使用して、COM アドインを使用せずにフォームを作成および実行することはできますが、COM アドインを使用すると、フォーム領域に独自のビジネス ロジックや高度な機能を盛り込むことができます。 標準フォームでフォーム ページをカスタマイズする場合とは異なり、VBScript を使用してフォームの背後にコードを記述することはありません。代わりに、COM アドインを使用してフォーム領域をプログラムします。 アドインでは、新しいインターフェイスである FormRegionStartup が実装されます。 また、フォーム領域で Microsoft Forms 2.0 コントロールと Microsoft Outlook コントロールを使用できます。 ここでは、 FormRegionStartup を実装する方法と、フォーム領域内の Outlook コントロールにアクセスする方法を説明します。

アドインの使用を指定する

メッセージ クラスのフォーム領域を登録する場合は、そのメッセージ クラスの Windows レジストリにキーを作成し (キーがまだ存在しない場合)、データとして等号 (=) を指定し、その後にアドインの ProgID を指定します。 Windows レジストリにフォーム領域を登録する方法の詳細については、「Windows レジストリでの フォーム領域の指定」を参照してください。

FormRegionStartup を実装する

COM アドインの IDTExtensibility2 インターフェイスを実装するクラスと同じクラスに、Outlook タイプ ライブラリに定義されている Outlook.FormRegionStartup インターフェイスを実装します。 Outlook は、このインターフェイスで次の 4 つのメソッドを呼び出します。

GetFormRegionStorage

Outlook では、アドインが制御するフォーム領域が表示される直前に、 GetFormRegionStorage メソッドが呼び出されます。 アドインは、Outlook からフォーム領域に関する情報を指定する GetFormRegionStorage への呼び出しを受け取ると、レイアウトに関する情報を返します。 この情報は、レイアウト ファイルへのローカル パス (.OFS ファイル)、Microsoft Windows IStorage オブジェクト、または OFS ファイルの内容を含むバイト配列。これにより、アドインは OFS をリソースとして格納できます。 Outlook は、返された情報を使用してコントロールをインスタンス化し、フォーム領域のレイアウトを計算します。 また Outlook は、フォーム領域の FormRegion オブジェクトをインスタンス化します。 GetFormRegionStorage の Microsoft Visual Basic と Microsoft C# のメソッド プロトタイプを次に示します。

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 コントロールにアクセスする 」セクションで説明されているように、無関係なコンテンツを抑制します。 BeforeFormRegionShow の Visual Basic と C# のメソッド プロトタイプを次に示します。

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 コントロールを持つ Forms 2.0 コントロールが、Outlook によって対応するテーマ付きコントロールに置き換えられます。 Controls コレクションからテーマ付きコントロールへの参照を取得すると、そのコントロールを Outlook タイプ ライブラリ内の適切な型にキャストできます。 その後、Outlook タイプ ライブラリでこれらのコントロールに公開されているすべてのプロパティ、メソッド、およびイベントにアクセスできるようになります。 VBScript を使用したフォームのカスタマイズとは異なり、 Click イベントだけでなく、すべてのコントロール イベントをリッスンできます。 コントロールの詳細については、「ユーザー定義フォームのコントロール」を参照してください。

次のコード サンプルは 、BeforeFormRegionShow メソッドが Outlook から入力パラメーターFormRegion を使用してフォーム オブジェクトを取得し、 それを MSForms.UserForm クラスにキャストし、 UserForm オブジェクト内のコントロールのコレクションにアクセスする方法を示しています。 この UserForm オブジェクトで表されるフォーム キャンバスには、という名前のテキスト ボックスと という名前 OlkTextBox1 のチェック ボックス OlkCheckBox1という 2 つの 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 マニフェストが提供されることを検出すると、キャッシュされたデータ内の ProgID を使用して、このアドインで実装される GetFormRegionManifest メソッドを呼び出し、フォーム領域の表示に必要な XML を取得します。 XML マニフェストが無効で、フォーム領域の XML スキーマに準拠していない場合、Outlook はフォーム領域を読み込むことができません。

フォーム領域を登録するときに ProgID を指定する方法の詳細については、「Windows レジストリでフォーム領域を指定する」を参照してください。

GetFormRegionManifest の Visual Basic と C# のメソッド プロトタイプを次に示します。

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 は アイコン の要素の子要素の値として addinを持つ XML マニフェスト内の任意のアイコンの GetFormRegionIcon の実装を呼び出すことで、対応するアドインを並び替え。 アドインを使用してアイコンを指定する方法の詳細については、「使い方: アドインを使用してフォーム領域のアイコンを指定する」を参照してください。

GetFormRegionIcon の Visual Basic と C# のメソッド プロトタイプを次に示します。

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 のサポートおよびフィードバックを参照してください。