次の方法で共有


チュートリアル : Outlook でデザインしたフォーム領域のインポート

このチュートリアルでは、Microsoft Office Outlook でフォーム領域をデザインする方法と、新しいフォーム領域ウィザードを使用して Outlook アドイン プロジェクトにフォーム領域をインポートする方法について説明します。Outlook でフォーム領域をデザインすると、Outlook データにバインドされたネイティブ Outlook コントロールをフォーム領域に追加できます。フォーム領域をインポートした後で、各コントロールのイベントを処理できます。

対象: このトピックの情報は、Outlook 2013 と Outlook 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

このチュートリアルでは、次の作業について説明します。

  • Outlook でのフォーム領域デザイナーを使用したフォーム領域のデザイン

  • フォーム領域の Outlook アドイン プロジェクトへのインポート

  • フォーム領域上のコントロールのイベント処理

[!メモ]

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

-

Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
  • Outlook 2013 または Outlook 2010。

[!メモ]

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

ビデオへのリンク 関連のビデオ デモについては、「How Do I: Create Outlook Form Regions Using Visual Studio 2008? (操作方法: Visual Studio 2008 を使用して Outlook フォーム領域を作成する)」を参照してください。

Outlook でのフォーム領域デザイナーを使用したフォーム領域のデザイン

この手順では、Outlook でフォーム領域をデザインします。次に、そのフォーム領域を Visual Studio にインポートできるように見つけやすい場所に保存します。

ここで作成するフォーム領域は、通常の仕事フォームと完全に置き換わります。このフォーム領域では、主要な仕事の実行前に完了していることが必要な仕事 (前提となる仕事) の進行状況を追跡できます。このフォーム領域には前提となる仕事の一覧が表示され、各仕事の完了ステータスが示されます。ユーザーは、この一覧に対して仕事を追加および削除できます。ユーザーは各仕事の完了ステータスを更新することもできます。

Outlook でフォーム領域デザイナーを使用してフォーム領域をデザインするには

  1. Microsoft Office Outlook を起動します。

  2. Outlookで、[Developer] のタブで、**[フォームのデザイン]**をクリックします。詳細については、「方法 : [開発] タブをリボンに表示する」を参照してください。

  3. [フォームのデザイン] ダイアログ ボックスで、[仕事] をクリックし、[開く] をクリックします。

  4. Outlookで、[Developer] のタブで、[デザイン] のグループで、をクリック [新しいフォーム領域]

    新しいフォーム領域が開きます。[フィールドの選択] が表示されない場合は、[ツール] グループ内の [フィールドの選択] をクリックします。

  5. [フィールドの選択] から [件名] フィールドと [達成率] フィールドをフォーム領域にドラッグします。

  6. [ツール] グループで、[コントロール ツールボックス] をクリックして、[ツールボックス] を開きます。

  7. [ツールボックス] から Label コントロールをフォーム領域にドラッグします。ラベルを [件名] フィールドと [達成率] フィールドの下に配置します。

  8. ラベルを右クリックし、[プロパティの詳細] をクリックします。

  9. [プロパティ] ウィンドウで、[キャプション] プロパティを「This task depends on the following tasks」に設定し、[幅] プロパティを 200 に設定します。次に、[適用] をクリックします。

  10. **[ツールボックス]**から ListBox コントロールをフォーム領域にドラッグします。リスト ボックスを This task depends on the following tasks ラベルの下に配置します。

  11. 追加したリスト ボックスを選択します。

  12. [プロパティ] ウィンドウで、[幅] を 300 に設定し、[適用] をクリックします。

  13. [ツールボックス] から Label コントロールをフォーム領域にドラッグします。ラベルをリスト ボックスの下に配置します。

  14. 追加したラベルを選択します。

  15. [プロパティ] ウィンドウで、[キャプション] プロパティを「Select a task to add to the list of dependent tasks」に設定し、[幅] プロパティを 200 に設定します。次に、[適用] をクリックします。

  16. [ツールボックス] から ComboBox コントロールをフォーム領域にドラッグします。コンボ ボックスを Select a task to add to the list of dependent tasks ラベルの下に配置します。

  17. 追加したコンボ ボックスを選択します。

  18. [プロパティ] ウィンドウで、[幅] プロパティを 300 に設定し、[適用] をクリックします。

  19. [ツールボックス] から CommandButton コントロールをフォーム領域にドラッグします。コマンド ボタンをコンボ ボックスの隣に配置します。

  20. 追加したコマンド ボタンを選択します。

  21. [プロパティ] ウィンドウで、[名前] を「AddDependentTask」に設定し、[キャプション] を「Add Dependent Task」に設定し、[幅] を 100 に設定します。次に、[適用] をクリックします。

  22. [フィールドの選択][新規フィールド] をクリックします。

  23. [新規フィールドの作成] ダイアログ ボックスの [名前] フィールドに「hiddenField」と入力し、[OK] をクリックします。

  24. [フィールドの選択] から [hiddenField] フィールドをフォーム領域にドラッグします。

  25. [プロパティ] ウィンドウで、[可視] を 0 (False) に設定し、[適用] をクリックします。

  26. Outlookで、[Developer] のタブで、[デザイン] のグループで、をクリックし、を [フォーム領域に名前を付けて保存][保存] のボタンをクリックします。

    フォーム領域に TaskFormRegion という名前を付け、コンピューターのローカル ディレクトリに保存します。

    このフォーム領域は Outlook Form Storage (.ofs) ファイルとして保存されます。ファイル名は TaskFormRegion.ofs となります。

  27. Outlook を終了します。

新しい Outlook アドイン プロジェクトの作成

この手順では、Outlook アドイン プロジェクトを作成します。後の手順で、このプロジェクトにフォーム領域をインポートします。

新しい Outlook アドイン プロジェクトを作成するには

  1. Visual Studio で、TaskAddIn という名前の Outlook アドイン プロジェクトを作成します。

  2. [新しいプロジェクト] ダイアログ ボックスの [ソリューションのディレクトリを作成] チェック ボックスをオンにします。

  3. プロジェクトを既定のプロジェクト ディレクトリに保存します。

    詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

フォーム領域のインポート

新しい Outlook フォーム領域ウィザードを使用して、Outlook でデザインしたフォーム領域を Outlook アドイン プロジェクトにインポートできます。

フォーム領域を Outlook アドイン プロジェクトにインポートするには

  1. ソリューション エクスプローラーで、[TaskAddIn] プロジェクトを右クリックし、[追加] をポイントして、[新しい項目] をクリックします。

  2. [テンプレート] ペインで [Outlook フォーム領域] を選択し、ファイルに TaskFormRegion という名前を付けて、[追加] をクリックします。

    新しいOutlook フォーム領域ウィザードが起動します。

  3. [フォーム領域を作成する方法の選択] ページで [Outlook Form Storage (.ofs) ファイルのインポート] をクリックし、[参照] をクリックします。

  4. [既存の Outlook フォーム領域ファイルの場所] ダイアログ ボックスで、TaskFormRegion.ofs があるフォルダーまで移動して TaskFormRegion.ofs を選択し、[開く] をクリックして、[次へ] をクリックします。

  5. [作成するフォーム領域の種類を選択します] ページで [すべて置換] をクリックし、[次へ] をクリックします。

    Outlook フォーム全体がすべて置換フォーム領域に置き換わります。フォーム領域の種類の詳細については、「Outlook フォーム領域の作成」を参照してください。

  6. [説明用のテキストを指定し、表示設定を選択します] ページで [次へ] をクリックします。

  7. [このフォーム領域を表示するメッセージ クラスを識別します] ページの [このフォーム領域を表示するカスタム メッセージ クラスを選択] フィールドに「IPM.Task.TaskFormRegion」と入力し、[完了] をクリックします。

    TaskFormRegion.cs ファイルまたは TaskFormRegion.vb ファイルがプロジェクトに追加されます。

フォーム領域上のコントロールのイベント処理

プロジェクトにフォーム領域を追加したので、次に Outlook のフォーム領域に追加したボタンの Microsoft.Office.Interop.Outlook.OlkCommandButton.Click イベントを処理するコードを追加できます。

また、フォーム領域が表示されたときにフォーム領域上のコントロールを更新する FormRegionShowing イベントにコードを追加します。

フォーム領域上のコントロールのイベントを処理するには

  1. ソリューション エクスプローラーで TaskFormRegion.cs または TaskFormRegion.vb を右クリックし、[コードの表示] をクリックします。

    TaskFormRegion.cs ファイルまたは TaskFormRegion.vb ファイルがコード エディターで開きます。

  2. TaskFormRegion クラスに次のコードを追加します。このコードは、Outlook の仕事フォルダーから各仕事の件名を取得し、フォーム領域上のコンボ ボックスに表示します。

    Private Sub populateComboBox()
        Dim Application As New Outlook.Application()
        Dim outlookNameSpace As Outlook.NameSpace = _
        Application.GetNamespace("MAPI")
        Dim taskFolder As Outlook.MAPIFolder = _
        outlookNameSpace.GetDefaultFolder _
            (Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderTasks)
        Dim taskItems As Outlook.Items = taskFolder.Items
        Dim task As Outlook.TaskItem
        For Each task In taskItems
            If Not (task.Subject Is Nothing) Then
                comboBox1.AddItem(task.Subject, System.Type.Missing)
            End If
        Next task
        comboBox1.Text = comboBox1.GetItem(0)
    End Sub
    
    private void populateComboBox()
    {
        Outlook.Application Application = new Outlook.Application();
        Outlook.NameSpace outlookNameSpace = Application.GetNamespace("MAPI");
        Outlook.MAPIFolder taskFolder = outlookNameSpace.GetDefaultFolder(
            Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderTasks);
        Outlook.Items taskItems = taskFolder.Items;
        foreach (Outlook.TaskItem task in taskItems)
        {
            if (task.Subject != null)
            {
                comboBox1.AddItem(task.Subject, System.Type.Missing);
            }
        }
        comboBox1.Text = comboBox1.GetItem(0);
    }
    
  3. TaskFormRegion クラスに次のコードを追加します。このコードは次のタスクを実行します。

    • FindTaskBySubjectName ヘルパー メソッドを呼び出して目的の仕事の件名を渡すことにより、仕事フォルダー内で Microsoft.Office.Interop.Outlook.TaskItem を検索します。FindTaskBySubjectName ヘルパー メソッドは次の手順で追加します。

    • 依存関係にある仕事のリスト ボックスに Microsoft.Office.Interop.Outlook.TaskItem.Subject 値と Microsoft.Office.Interop.Outlook.TaskItem.PercentComplete 値を追加します。

    • フォーム領域の隠しフィールドに仕事の件名を追加します。追加した値が Outlook のアイテムの一部として隠しフィールドに格納されます。

    Private Sub AddDependentTask_Click1() Handles addDependentTask.Click
        Dim tempTaskItem As Outlook.TaskItem = FindTaskBySubjectName _
            (comboBox1.Text)
        If Not (tempTaskItem Is Nothing) Then
            Me.listBox1.AddItem(tempTaskItem.PercentComplete.ToString() & _
                "% Complete -- " & tempTaskItem.Subject, System.Type.Missing)
            Me.olkTextBox3.Text = Me.olkTextBox3.Text & "|" & tempTaskItem.Subject
        End If
    End Sub
    
        void AddDependentTask_Click()
        {
            Outlook.TaskItem tempTaskItem = FindTaskBySubjectName(comboBox1.Text);
            if (tempTaskItem != null)
            {
                this.listBox1.AddItem(tempTaskItem.PercentComplete.ToString()
    + "% Complete -- " + tempTaskItem.Subject, System.Type.Missing);
                this.olkTextBox3.Text = this.olkTextBox3.Text + "|" + 
                    tempTaskItem.Subject;
            }
        }
    
  4. TaskFormRegion クラスに次のコードを追加します。このコードは、前の手順で説明した FindTaskBySubjectName ヘルパー メソッドを提供します。

    Private Function FindTaskBySubjectName(ByVal subjectName As String) _
        As Outlook.TaskItem
        Dim Application As New Outlook.Application()
        Dim outlookNameSpace As Outlook.NameSpace = _
            Application.GetNamespace("MAPI")
        Dim tasksFolder As Outlook.MAPIFolder = _
            outlookNameSpace.GetDefaultFolder _
                (Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderTasks)
        Dim taskItems As Outlook.Items = tasksFolder.Items
        Dim taskItem As Outlook.TaskItem
        For Each taskItem In taskItems
            If taskItem.Subject = subjectName Then
                Return taskItem
            End If
        Next taskItem
        Return Nothing
    End Function
    
    private Outlook.TaskItem FindTaskBySubjectName(string subjectName)
    {
        Outlook.Application Application = new Outlook.Application();
        Outlook.NameSpace outlookNameSpace = Application.GetNamespace("MAPI");
        Outlook.MAPIFolder tasksFolder =
            outlookNameSpace.GetDefaultFolder(
        Microsoft.Office.Interop.Outlook.
            OlDefaultFolders.olFolderTasks);
        Outlook.Items taskItems = tasksFolder.Items;
        foreach (Outlook.TaskItem taskItem in taskItems)
        {
            if (taskItem.Subject == subjectName)
            {
                return taskItem;
            }
        }
        return null;
    }
    
  5. TaskFormRegion クラスに次のコードを追加します。このコードは次のタスクを実行します。

    • フォーム領域のリスト ボックスを依存関係にある各仕事の現在の完了ステータスで更新します。

    • 隠しテキスト フィールドを解析し、依存関係にある各仕事の件名を取得します。さらに、FindTaskBySubjectName ヘルパー メソッドを呼び出して各仕事の件名を渡すことにより、仕事フォルダー内で各 Microsoft.Office.Interop.Outlook.TaskItem を検索します。

    • 依存関係にある仕事のリスト ボックスに Microsoft.Office.Interop.Outlook.TaskItem.Subject 値と Microsoft.Office.Interop.Outlook.TaskItem.PercentComplete 値を追加します。

    Private Sub RefreshTaskListBox()
        listBox1.Clear()
        Dim tempTaskItem As Outlook.TaskItem
        Dim tempArray As [String]() = olkTextBox3.Text.Split(New [Char]() {"|"c})
    
        Dim tempString As String
        For Each tempString In tempArray
            tempTaskItem = FindTaskBySubjectName(tempString)
            If Not (tempTaskItem Is Nothing) Then
                Me.listBox1.AddItem(tempTaskItem.PercentComplete.ToString() & _
                    "% Complete -- " & tempTaskItem.Subject, System.Type.Missing)
            End If
        Next tempString
    End Sub
    
    void RefreshTaskListBox()
    {
        listBox1.Clear();
        Outlook.TaskItem tempTaskItem;
        String[] tempArray = olkTextBox3.Text.Split(new Char[] { '|' });
    
        foreach (string tempString in tempArray)
        {
            tempTaskItem = FindTaskBySubjectName(tempString);
            if (tempTaskItem != null)
            {
                this.listBox1.AddItem(tempTaskItem.PercentComplete.ToString()
                    + "% Complete -- " + tempTaskItem.Subject, 
                        System.Type.Missing);
            }
        }
    }
    
  6. TaskFormRegion_FormRegionShowing イベント ハンドラーを次のコードで置き換えます。このコードは次のタスクを実行します。

    • フォーム領域が表示されたときに、フォーム領域のコンボ ボックスに仕事の件名を表示します。

    • フォーム領域が表示されたときに、RefreshTaskListBox ヘルパー メソッドを呼び出します。これにより、アイテムを開いたときにリスト ボックスに追加された依存関係にある仕事が表示されます。

    Private Sub TaskFormRegion_FormRegionShowing(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.FormRegionShowing
        populateComboBox()
        RefreshTaskListBox()
    End Sub
    
    private void TaskFormRegion_FormRegionShowing
        (object sender, EventArgs e)
    {
        populateComboBox();
        RefreshTaskListBox();
        this.addDependentTask.Click += new
        Microsoft.Office.Interop.Outlook.
            OlkCommandButtonEvents_ClickEventHandler(AddDependentTask_Click);
    
    }
    

Outlook フォーム領域のテスト

フォーム領域をテストするには、フォーム領域の前提となる仕事の一覧に仕事を追加します。前提となる仕事の完了ステータスを更新し、その仕事の更新された完了ステータスを前提となる仕事の一覧に表示します。

フォーム領域をテストするには

  1. F5 キーを押してプロジェクトを実行します。

    Outlook が起動します。

  2. Outlookで、[ホーム] のタブで、をクリック **[新しい品目]**は、を **[タスク]**をクリックします。

  3. タスク フォームの [件名] フィールドに「Dependent Task」と入力します。

  4. リボンの [仕事] タブで、[アクション] グループの [保存して閉じる] をクリックします。

  5. Outlookで、[ホーム] のタブで、をクリック **[新しい品目]は、[その他のアイテム]をクリックし、[フォームの選択]**をクリックします。

  6. [フォームの選択] ダイアログ ボックスで [TaskFormRegion] をクリックし、[開く] をクリックします。

    TaskFormRegion フォーム領域が表示されます。このフォーム領域が仕事フォーム全体と置き換わります。[Select a task to add to the list of dependent tasks] コンボ ボックスに仕事フォルダー内の他の仕事が表示されます。

  7. 仕事フォームの [件名] フィールドに「Primary Task」と入力します。

  8. [Select a task to add to the list of dependent tasks] コンボ ボックスで [Dependent Task] をクリックし、[Add Dependent Task] をクリックします。

    [This task depends on the following tasks] リスト ボックスに [達成率 0% -- Dependent Task] と表示されます。これで、ボタンの Microsoft.Office.Interop.Outlook.OlkCommandButton.Click イベントが正常に処理されたことがわかります。

  9. Primary Task アイテムを保存して閉じます。

  10. Dependent Task アイテムを Outlook で再度開きます。

  11. Dependent Task フォームで、[達成率] フィールドの値を 50% に変更します。

  12. Dependent Task リボンの [仕事] タブで、[アクション][保存して閉じる] をクリックします。

  13. Outlook で Primary Task アイテムを再度開きます。

    今度は、[This task depends on the following tasks] リスト ボックスに [達成率 50% -- Dependent Task] と表示されます。

次の手順

Outlook の UI をカスタマイズする方法の詳細については、次のトピックを参照してください。

参照

処理手順

チュートリアル : Outlook フォーム領域のデザイン

方法 : フォーム領域を Outlook アドイン プロジェクトに追加する

方法 : Outlook にフォーム領域が表示されないようにする

概念

実行時におけるフォーム領域へのアクセス

Outlook フォーム領域の作成に関するガイドライン

フォーム領域の Outlook メッセージ クラスへの関連付け

Outlook フォーム領域のカスタム動作

その他の技術情報

Outlook フォーム領域の作成