逐步解說:匯入在 Outlook 中設計的表單區域
更新:2007 年 11 月
適用於 |
---|
本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。 專案類型
Microsoft Office 版本
如需詳細資訊,請參閱依應用程式和專案類型提供的功能。 |
本逐步解說將示範如何在 Microsoft Office Outlook 中設計表單區域,然後使用 [新增表單區域] 精靈將表單區域匯入 Visual Studio Tools for Office Outlook 增益集專案。在 Outlook 中設計表單區域可讓您將原生 Outlook 控制項加入至繫結至 Outlook 資料的表單區域。匯入表單區域後,您就可以處理每個控制項的事件。
此逐步解說會說明以下工作:
使用 Outlook 中的表單區域設計工具設計表單區域。
將表單區域匯入至 Outlook 增益集專案。
處理表單區域上控制項的事件。
注意事項: |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
Visual Studio Tools for Office (Visual Studio 2008 Professional 和 Visual Studio Team System 的選擇性元件)。
Microsoft Office Outlook 2007。
注意事項: |
---|
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置:您所擁有的 Visual Studio 版本和使用的設定決定了這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
使用 Outlook 中的表單區域設計工具設計表單區域
在這個步驟中,您將在 Outlook 中設計表單區域。然後您會將表單區域儲存到容易找到的位置,如此就能將它匯入至 Visual Studio。
這個範例表單區域會完全取代常用的工作表單。其中提供追蹤所有必須在執行主要工作之前先完成之工作進度的方式 (必要工作)。表單區域會顯示必要工作清單,並且顯示清單中每項工作的完成狀態。使用者可將工作加入至清單,以及從清單中移除工作。此外還可以重新整理每項工作的完成狀態。
使用 Outlook 中的表單區域設計工具設計表單區域
啟動 Microsoft Office Outlook 2007。
從 [工具] 功能表中,指向 [表單],然後按一下 [設計表單]。
在 [設計表單] 方塊中,按一下 [工作],再按一下 [開啟]。
在 [開發人員] 索引標籤上,按一下 [設計] 群組中的 [表單區域],再按一下 [新增表單區域]。
新的表單區域隨即開啟。如果 [欄位選擇] 沒有出現,請按一下 [工具] 群組中的 [欄位選擇]。
從 [欄位選擇] 將 [主旨] 和 [% 完成] 欄位拖曳到表單區域。
按一下 [工具] 群組中的 [控制工具箱],開啟 [工具箱]。
從 [工具箱] 將標籤拖曳到表單區域。將標籤定位在 [主旨] 和 [% 完成] 欄位下方。
以滑鼠右鍵按一下標籤,然後按一下 [進階屬性]。
在 [屬性] 視窗中,將 [Caption] 屬性設為 This task depends on the following tasks,將 [Width] 屬性設為 200,然後按一下 [套用]。
將 ListBox 控制項從 [工具箱] 拖曳至表單區域。將清單方塊定位在 This task depends on the following tasks 標籤下方。
選取您剛剛加入的清單方塊。
在 [屬性] 視窗中,將 [Width] 設為 300,然後按一下 [套用]。
從 [工具箱] 將標籤拖曳到表單區域。將標籤定位在清單方塊下方。
選取您剛剛加入的標籤。
在 [屬性] 視窗中,將 [Caption] 屬性設為 Select a task to add to the list of dependent tasks,將 [Width] 屬性設為 200,然後按一下 [套用]。
將 ComboBox 控制項從 [工具箱] 拖曳至表單區域。將下拉式方塊定位在 Select a task to add to the list of dependent tasks 標籤下方。
選取您剛剛加入的下拉式方塊。
在 [屬性] 視窗中,將 [Width] 屬性設為 300,然後按一下 [套用]。
將 CommandButton 控制項從 [工具箱] 拖曳至表單區域。將命令按鈕定位在下拉式方塊旁邊。
選取您剛剛加入的命令按鈕。
在 [屬性] 視窗中,分別將 [Name] 設為 AddDependentTask、[Caption] 設為 Add Dependent Task 及 [Width] 設為 100,然後按一下 [套用]。
在 [欄位選擇] 中按一下 [新增]。
在 [新增欄位] 對話方塊的 [名稱] 欄位中輸入 hiddenField,然後按一下 [確定]。
將 [hiddenField] 欄位從 [欄位選擇] 拖曳到表單區域中。
在 [屬性] 視窗中,將 [Visible] 設為 0 - False,然後按一下 [套用]。
在 [開發人員] 索引標籤上,按一下 [設計] 群組中的 [表單區域],再按一下 [另存表單區域]。將表單區域命名為 TaskFormRegion,並將它儲存到電腦上的本機目錄中。
Outlook 會將表單區域儲存為 Outlook 表單儲存區 (.ofs) 檔。表單區域會以 TaskFormRegion.ofs 名稱儲存。
結束 Outlook。
建立新的 Outlook 增益集專案
在這個步驟中,您將建立 Outlook 增益集專案。在本逐步解說的後段,您會將表單區域匯入專案中。
若要建立新的 Outlook 增益集專案
在 Visual Studio 中,以 TaskAddIn 名稱建立 Outlook 2007 增益集專案。
選取 [新增專案] 對話方塊中的 [為方案建立目錄]。
將專案儲存到預設的專案目錄。
如需詳細資訊,請參閱 HOW TO:建立 Visual Studio Tools for Office 專案。
匯入表單區域
您可以使用 [新的 Outlook 表單區域] 精靈,將 Outlook 中設計的表單區域匯入至 Outlook 增益集專案。
將表單區域匯入至 Outlook 增益集專案
在 [方案總管] 中,以滑鼠右鍵按一下 [TaskAddIn] 專案,指向 [加入],然後按一下 [新增項目]。
在 [範本] 窗格中選取 [Outlook 表單區域],為檔案 TaskFormRegion 命名,然後按一下 [加入]。
[新的Outlook 表單區域] 精靈隨即啟動。
在 [選取您希望如何建立此表單區域] 頁面中,按一下 [匯入 Outlook 表單儲存區 (.ofs) 檔案],然後按一下 [瀏覽]。
在 [現有 Outlook 表單區域檔案位置] 對話方塊中,瀏覽至 TaskFormRegion.ofs 的位置,選取 [TaskFormRegion.ofs],按一下 [開啟],再按 [下一步]。
在 [選取您要建立的表單區域類型] 頁面上按一下 [全部取代],然後按 [下一步]。
「全部取代」(Replace-all) 表單區域將取代整個 Outlook 表單。如需表單區域類型的詳細資訊,請參閱建立 Outlook 表單區域。
在 [提供描述文字和選取顯示設定] 頁面上按 [下一步]。
在 [識別將顯示此表單區域的訊息類別] 頁面上的 [將顯示此表單區域的自訂訊息類別為何?] 欄位中,輸入 IPM.Task.TaskFormRegion,然後按一下 [完成]。
TaskFormRegion.cs 或 TaskFormRegion.vb 檔會加入您的專案中。
處理表單區域上控制項的事件
現在專案中已有表單區域,您可以加入程式碼來控制 Outlook 表單區域中所加入按鈕的 Microsoft.Office.Interop.Outlook.OlkCommandButton.Click 事件。
此外還可以將程式碼加入至 FormRegionShowing 事件,以便在表單區域出現時更新表單區域上的控制項。
處理表單區域上控制項的事件
以滑鼠右鍵按一下 [方案總管] 中的 [TaskFormRegion.cs] 或 [TaskFormRegion.vb],然後按一下 [檢視程式碼]。
TaskFormRegion.cs 或 TaskFormRegion.vb 會在程式碼編輯器中開啟。
將下列程式碼加入至 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); }
將下列程式碼加入至 TaskFormRegion 類別。這個程式碼會執行下列工作:
在 [工作] 資料夾中呼叫 FindTaskBySubjectName Helper 方法並傳遞所需工作的主旨,藉此尋找 Microsoft.Office.Interop.Outlook.TaskItem。您將在下一個步驟中加入 FindTaskBySubjectName Helper 方法。
將 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; } }
將下列程式碼加入至 TaskFormRegion 類別。這個程式碼會提供 Helper 方法 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; }
將下列程式碼加入至 TaskFormRegion 類別。這個程式碼會執行下列工作:
以每個相依工作的完成狀態重新整理表單區域的清單方塊。
剖析隱藏的文字方塊,以取得每個相依工作的主旨。接著它會在 [工作] 資料夾中呼叫 FindTaskBySubjectName Helper 方法並傳遞每個工作的主旨,藉此尋找每個 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); } } }
以下列程式碼取代 TaskFormRegion_FormRegionShowing 事件處理常式。這個程式碼會執行下列工作:
在表單區域出現時,以工作主旨填入表單區域上的下拉式方塊。
在表單區域出現時,呼叫 RefreshTaskListBox Helper 方法。如此會顯示之前開啟項目時,加入至清單方塊的任何相依工作。
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 表單區域
若要測試表單區域,請將工作加入至表單區域上必要工作的清單中。更新必要工作的完成狀態,然後檢視必要工作清單中更新的工作完成狀態。
若要測試表單區域
按 F5 執行專案。
Outlook 隨即啟動。
在 Outlook 的 [檔案] 功能表上,指向 [新增],然後按一下 [工作]。
在工作表單的 [主旨] 欄位中輸入 Dependent Task。
在功能區的 [工作] 索引標籤上,按一下 [動作] 群組中的 [儲存後關閉]。
在 Outlook 的 [檔案] 功能表上,指向 [新增],然後按一下 [選擇表單]。
在 [選擇表單] 對話方塊中,按一下 [TaskFormRegion],然後按一下 [開啟]。
[TaskFormRegion] 表單區域隨即出現。這個表單會取代整個工作表單。[Select a task to add to the list of dependent tasks] 下拉式方塊中會填入 [工作] 資料夾中的其他工作。
在工作表單上的 [主旨] 欄位中,輸入 Primary Task。
在 [Select a task to add to the list of dependent tasks] 下拉式方塊中選取 [Dependent Task],然後按一下 [Add Dependent Task]。
[0% 完成 -- Dependent Task] 會出現在 [This task depends on the following tasks] 清單方塊中。這表示您已成功處理按鈕的 Microsoft.Office.Interop.Outlook.OlkCommandButton.Click 事件。
請儲存並關閉 [Primary Task] 項目。
在 Outlook 中重新開啟 [Dependent Task] 項目。
在 [Dependent Task] 表單上,將 [% 完成] 欄位變更為 50%。
在 Dependent Task 功能區的 [工作] 索引標籤上,按一下 [動作] 群組中的 [儲存後關閉]。
在 Outlook 中重新開啟 [Primary Task] 項目。
現在 [50% 完成 -- Dependent Task] 會出現在 [This task depends on the following tasks] 清單方塊中。
後續步驟
您可以透過下列主題,進一步了解如何自訂 Outlook 應用程式的 UI:
若要深入了解如何透過拖曳 Managed 控制項至視覺化設計工具的方式設計表單區域的外觀,請參閱逐步解說:設計 Outlook 表單區域。
若要深入了解如何自訂 Outlook 項目的功能區,請參閱自訂 Outlook 的功能區。
若要深入了解如何將自訂工作窗格加入至 Outlook,請參閱自訂工作窗格概觀。