逐步解說:使用內容控件建立範本

本逐步解說示範如何建立文件層級自訂,這個自訂會使用內容控制項在 Microsoft Office Word 範本中建立可重複使用的結構化內容。

適用於: 本主題中的資訊適用於 Word 的檔案層級專案。 如需詳細資訊,請參閱 Office 應用程式 lication 和項目類型所提供的功能。

Word 可讓您建立可重複使用的檔元件集合,命名 為建置組塊。 這個逐步解說顯示如何建立兩個資料表做為建置組塊。 每個資料表包含數個內容控制項,可以有不同的內容類型,例如純文字或日期。 其中一個資料表包含員工的資訊,另一個資料表則包含客戶回函。

從範本建立文件之後,您可以將任一個資料表加入至文件,方法是使用數個 BuildingBlockGalleryContentControl 物件,這些物件會顯示範本中可用的建置組塊。

本逐步解說將說明下列工作:

  • 在設計階段建立包含 Word 範本中內容控制項的資料表。

  • 以程式設計方式填入下拉式方塊內容控制項和下拉式清單內容控制項。

  • 防止使用者編輯指定的資料表。

  • 將資料表加入範本的建置組塊集合。

  • 建立會顯示範本中可用建置組塊的內容控制項。

    注意

    在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 IDE 個人化

必要條件

您需要下列元件才能完成這個逐步解說:

建立新的 Word 範本專案

建立 Word 範本,讓使用者可以輕鬆建立自己的複本。

建立新的 Word 範本專案

  1. 建立名稱為 MyBuildingBlockTemplate 的 Word 範本專案。 在精靈中,於方案中建立新文件。 如需詳細資訊,請參閱 如何:在Visual Studio中建立 Office專案。

    Visual Studio 會在設計工具中開啟新的 Word 範本,並將 MyBuildingBlockTemplate 專案新增方案總管

建立員工數據表

建立含有四種不同內容控制項的資料表,使用者可以在這個資料表中輸入員工資訊。

建立員工資料表

  1. 在 Visual Studio 設計工具中裝載的 Word 範本中,按兩下功能區上的 [ 插入 ] 索引標籤。

  2. 在 [數據表] 群組中,按兩下 [數據表],然後插入具有兩個數據行和四個數據列的數據表。

  3. 在第一個資料行中輸入文字,讓它類似下面資料行:

    員工名稱
    雇用日期
    標題
    圖片
  4. 按兩下第二個資料行中的第一個儲存格(員工名稱)。

  5. 按一下 [功能區] 上的 [開發人員] 索引標籤。

    注意

    如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 如何:在功能區上顯示開發人員索引標籤。

  6. 在 [ 控件] 群組中,按兩下 [ 文字 ] 按鈕 PlainTextContentControl ,將 新增 PlainTextContentControl 至第一個單元格。

  7. 按兩下第二個資料行中的第二個儲存格(在雇用日期)。

  8. 在 [ 控件] 群組中 ,按兩下 [日期選擇器 ] 按鈕 DatePickerContentControl ,將 新增至第二個 DatePickerContentControl 單元格。

  9. 按兩下第二欄的第三個儲存格(標題)。

  10. 在 [ 控件 ] 群組中,按兩下拉 式方塊 ] 按鈕 ComboBoxContentControl ,將 新增至第三個 ComboBoxContentControl 儲存格。

  11. 按兩下第二欄的最後一個儲存格(圖片)。

  12. 在 [ 控件] 群組中,按兩下 [ 圖片內容控件 ] 按鈕 PictureContentControl ,將 新增至最後一個 PictureContentControl 單元格。

建立客戶意見反應數據表

建立含有三種不同內容控制項類型的資料表,使用者可以在這個資料表中輸入客戶回函資訊。

建立客戶回函資料表

  1. 在 Word 範本中,按下您稍早新增的員工數據表之後的行,然後按 Enter 以新增段落。

  2. 在功能區上,按兩下 [ 插入] 索引標籤。

  3. 在 [數據表] 群組中,按兩下 [數據表],然後插入含有兩個數據行和三個數據列的數據表。

  4. 在第一個資料行中輸入文字,讓它類似下面資料行:

    客戶名稱
    滿意度評等
    註解
  5. 按兩下第二個資料行的第一個數據格(客戶名稱)。

  6. 按一下 [功能區] 上的 [開發人員] 索引標籤。

  7. 在 [ 控件] 群組中,按兩下 [ 文字 ] 按鈕 PlainTextContentControl ,將 新增 PlainTextContentControl 至第一個單元格。

  8. 按兩下第二個資料行的第二個數據格(在 [滿意度評等] 旁)。

  9. 在 [ 控件] 群組中 ,按兩下拉式清單 ] 按鈕 DropDownListContentControl ,將 新增至第二個 DropDownListContentControl 儲存格。

  10. 按兩下第二個數據行的最後一個數據格(批 旁)。

  11. 在 [ 控件 ] 群組中 ,按兩下 [RTF] 按鈕 RichTextContentControl ,將 新增至最後一個 RichTextContentControl 單元格。

以程式設計方式填入下拉式方塊和下拉式清單

您可以使用 Visual Studio 中的 [屬性] 視窗,在設計時間初始化內容控制件。 您也可以在運行時間初始化它們,這可讓您動態設定其初始狀態。 在本逐步解說中,使用程式代碼在運行時間填入 和 DropDownListContentControl 中的專案ComboBoxContentControl,以便查看這些對象的運作方式。

以程式設計方式修改內容控制項的 UI

  1. 方案總管 中,以滑鼠右鍵按兩下 ThisDocument.csThisDocument.vb,然後按兩下 [檢視程式代碼]。

  2. 將下列程式碼加入 ThisDocument 類別。 這個程式碼會宣告數個物件,您稍後於此逐步解說中會用到。

    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl2;
    
  3. 將下面程式碼加新增至 ThisDocument 類別的 ThisDocument_Startup 方法。 此程式碼會將項目加入資料表中的 ComboBoxContentControlDropDownListContentControl,然後設定預留位置文字,在使用者編輯這些控制項之前先行顯示在控制項中。

    comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own";
    comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0);
    comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1);
    comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2);
    
    dropDownListContentControl1.PlaceholderText =
        "Choose a rating (1 lowest, 3 highest)";
    dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0);
    dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1);
    dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
    

防止使用者編輯員工數據表

使用您稍早宣告的 GroupContentControl 物件可保護員工資料表。 保護資料表之後,使用者仍然可以編輯資料表中的內容控制項。 但是,無法編輯第一欄中的文字或以其他方式修改資料表,例如加入或刪除資料列和資料行。 如需如何使用 GroupContentControl 來保護檔一部分的詳細資訊,請參閱 內容控件

防止使用者編輯員工資料表

  1. 請將下列程式碼加入至 ThisDocument 類別的 ThisDocument_Startup 方法,在您於上一個步驟中所加入的程式碼之後。 此程式碼會將資料表放到您稍早宣告的 GroupContentControl 物件內,藉以防止使用者編輯員工資料表。

    this.Tables[1].Range.Select();
    groupControl1 = this.Controls.AddGroupContentControl("groupControl1");
    

將數據表新增至建置組塊集合

將資料表加入至範本中文件建置組塊的集合,以便使用者可以將您建立的資料表插入至文件。 如需檔建置元件的詳細資訊,請參閱 內容控件

將資料表加入至範本中的建置組塊

  1. 請將下列程式碼加入至 ThisDocument 類別的 ThisDocument_Startup 方法,在您於上一個步驟中所加入的程式碼之後。 此程式代碼會將包含數據表的新建置組塊新增至 Microsoft.Office.Interop.Word.BuildingBlockEntries 集合,其中包含範本中所有可重複使用的建置組塊。 新的建置組塊定義在名為 Employee 和 Customer Information 的新類別中,並指派建置組塊類型 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1

    Word.Template template1 = this.AttachedTemplate as Word.Template;
    
    if (template1 != null)
    {
        object description = null;
        template1.BuildingBlockEntries.Add("Employee Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
        template1.BuildingBlockEntries.Add("Customer Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
    }
    
  2. 請將下列程式碼加入至 ThisDocument 類別的 ThisDocument_Startup 方法,在您於上一個步驟中所加入的程式碼之後。 此程式碼會從範本刪除資料表。 因為您已將資料表加入至範本中可重複使用的建置組塊庫,所以不再需要它們了。 程式碼會先讓文件進入設計模式,如此就可以刪除受保護的員工資料表。

    if (!this.FormsDesign)
    {
        this.ToggleFormsDesign();
    }
    this.Tables[2].Delete();
    this.Tables[1].Delete();
    this.ToggleFormsDesign();
    

建立顯示建置組塊的內容控制件

建立內容控制項,用來存取您稍早建立的建置組塊 (亦即資料表)。 使用者可以按一下此控制項,將資料表加入文件。

建立會顯示建置組塊的內容控制項

  1. 請將下列程式碼加入至 ThisDocument 類別的 ThisDocument_Startup 方法,在您於上一個步驟中所加入的程式碼之後。 此程式碼會初始化您稍早宣告的 BuildingBlockGalleryContentControl 物件。 會顯示 BuildingBlockGalleryContentControl [員工和客戶資訊] 類別中定義且具有建置組塊類型 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1的所有建置組塊。

    buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[1].Range, "buildingBlockControl1");
    buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl1.PlaceholderText = "Choose your first building block";
    
    buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[2].Range, "buildingBlockControl2");
    buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl2.PlaceholderText = "Choose your second building block";
    

測試專案

使用者可以按一下文件中的建置組塊庫控制項,插入員工資料表或客戶回函資料表。 使用者可以在這兩個資料表的內容控制項中輸入或選取回應。 使用者可以修改客戶回函資料表的其他部分,但是應該無法修改員工資料表的其他部分。

測試員工資料表

  1. F5 執行專案。

  2. 按兩下 [ 選擇您的第一個建置元件 ] 以顯示第一個建置組塊庫內容控制件。

  3. 按兩下控制檔中[自訂資源庫 1] 標題旁的下拉式箭號,然後選取 [員工數據表]。

  4. 按兩下 [員工名稱] 單元格右邊的儲存格,然後輸入名稱。

    驗證您是否只能將文字加入此儲存格。 PlainTextContentControl 只允許使用者加入文字,不允許其他類型的內容,例如圖片或資料表。

  5. 按兩下 [僱用日期] 單元格右邊的單元格,然後選取日期選擇器中的日期。

  6. 按兩下 [標題] 單元格右邊的單元格,然後在下拉式方塊中選取其中一個職稱。

    (選擇性) 輸入不在清單中的工作職稱。 這是可行的,因為 ComboBoxContentControl 可以讓使用者從項目清單中選取或自行輸入。

  7. 按兩下圖片儲存格右側儲存格中的圖示,然後瀏覽至影像以顯示它。

  8. 嘗試將資料列或資料行加入資料表,並嘗試從資料表刪除資料列和資料行。 驗證您是否無法修改資料表。 GroupContentControl 會防止您進行任何修改。

測試客戶回函資料表

  1. 按兩下 [ 選擇您的第二個建置元件 ] 以顯示第二個建置組塊庫內容控制件。

  2. 按兩下控制檔中[自訂資源庫 1] 標題旁的下拉式箭號,然後選取 [客戶資料表]。

  3. 按兩下 [客戶名稱] 單元格右邊的儲存格,然後輸入名稱。

  4. 按兩下 [滿意度評等] 單元格右邊的單元格,然後選取其中一個可用的選項。

    驗證您是否無法輸入自己的項目。 DropDownListContentControl 只允許使用者從項目清單中選取。

  5. 按兩下 [批註] 單元格右邊的單元格,然後輸入一些批注。

    (選擇性) 加入文字以外的內容,例如圖片或內嵌資料表。 這是可行的,因為 RichTextContentControl 可以讓使用者加入文字以外的內容。

  6. 驗證您是否可以將資料列或資料行加入資料表,以及是否可以從資料表刪除資料列和資料行。 這是可行的,因為您尚未將資料表放入 GroupContentControl 進行保護。

  7. 關閉範本。

下一步

您可以透過下列主題,進一步了解如何使用內容控制項: