逐步解說:在 VSTO 載入宏的運行時間將控件新增至檔

您可以使用 VSTO 載入宏,將控件新增至任何開啟的 Microsoft Office Word 檔。 本逐步解說示範如何使用功能區讓使用者將 或 RichTextContentControl 新增Button至檔。

適用對象: 本主題資訊適用於 Word 2010 的 VSTO 增益集專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

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

  • 建立新的 Word VSTO 增益集專案。

  • 提供可將控制項加入文件的使用者介面 (UI)。

  • 在執行階段將控制項加入文件。

  • 移除文件的控制項。

    注意

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

必要條件

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

建立新的 Word 載入宏專案

請從建立 Word VSTO 增益集專案開始。

建立新的 Word VSTO 增益集專案

  1. 使用 WordDynamicControls 名稱建立 Word 的 VSTO 載入宏專案。 如需詳細資訊,請參閱 如何:在Visual Studio中建立 Office專案。

  2. 加入 Microsoft.Office.Tools.Word.v4.0.Utilities.dll 組件的參考。 本逐步解說稍後會需要用到此參考,以透過程式設計的方式將 Windows Forms 控制項加入文件。

提供UI以將控件新增至檔

將自訂索引標籤加入 Word 功能區。 使用者可以選取索引標籤上的核取方塊,將控制項加入文件。

提供可將控制項加入文件的 UI

  1. 在 [專案] 功能表上,按一下 [加入新項目]

  2. 選取 [ 加入新項目 ] 對話方塊中的 [ 功能區 (視覺化設計工具)]。

  3. 將新功能區的名稱變更為 MyRibbon,然後按一下 [加入]

    MyRibbon.csMyRibbon.vb 檔案會在功能區設計工具中開啟,並顯示預設索引標籤和群組。

  4. 在功能區設計工具中,按一下 [group1] 群組。

  5. 在 [屬性] 視窗中,將 [group1] 的 [Label] 屬性變更為 [加入控制項]

  6. 從 [工具箱] 的 [Office 功能區控制項] 索引標籤,將 CheckBox 控制項拖曳至 [group1]

  7. 按一下 [CheckBox1] 予以選取。

  8. 在 [屬性] 視窗中變更下列屬性。

    屬性
    名稱 addButtonCheckBox
    標籤 加入按鈕
  9. 將第二個核取方塊加入 [group1] Walkthrough: Adding Controls to a Worksheet at Run Time in an VSTO Add-in project,然後變更下列屬性。

    屬性
    名稱 addRichTextCheckBox
    標籤 加入 RTF 控制項
  10. 在功能區設計工具中,按兩下 [加入按鈕] Walkthrough: Adding Controls to a Worksheet at Run Time in an VSTO Add-in project

    在程式碼編輯器中,隨即開啟 [加入按鈕] Click核取方塊的 事件處理常式。

  11. 返回功能區設計工具並按兩下 [加入 RTF 控制項] Walkthrough: Adding Controls to a Worksheet at Run Time in an VSTO Add-in project

    在程式碼編輯器中,隨即開啟 [加入 RTF 控制項] Click核取方塊的 事件處理常式。

    稍後在本逐步解說中,您將會把這些程式碼加入這些事件處理常式,以加入和移除使用中文件的控制項。

在使用中檔上新增和移除控制件

在 VSTO 增益集程式碼中,您必須將使用中文件轉換成 Document主項目 ,才能加入控制項。 在 Office 方案中,Managed 控制項只能加入主項目,主項目是做為控制項的容器。 在 VSTO 載入宏專案中,可以使用 方法在運行時間 GetVstoObject 建立主專案。

將方法加入 ThisAddIn 類別,可以呼叫該類別來加入或移除使用中文件的 ButtonRichTextContentControl 。 稍後在本逐步解說,您將從功能區上之核取方塊的 Click 事件處理常式呼叫這些方法。

加入和移除使用中文件的控制項

  1. 方案總管 中,按兩下ThisAddIn.csThisAddIn.vb 以在程式碼編輯器中開啟檔案。

  2. 將下列程式碼加入 ThisAddIn 類別。 此程式碼會宣告 ButtonRichTextContentControl 物件,它們代表將會加入文件的控制項。

    private Microsoft.Office.Tools.Word.Controls.Button button = null;
    private RichTextContentControl richTextControl = null;
    
  3. 將下列方法新增至 ThisAddIn 類別。 當使用者按一下功能區上的 [加入按鈕] 核取方塊時,如果已選取核取方塊,則此方法會將 Button 加入文件目前的選取範圍,如果已清除核取方塊則會移除 Button

    internal void ToggleButtonOnDocument()
    {
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyButton";
    
        if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                button = vstoDocument.Controls.AddButton(
                    selection.Range, 100, 30, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    
  4. 將下列方法新增至 ThisAddIn 類別。 當使用者按一下功能區上的 [加入 RTF 控制項] 核取方塊時,如果已選取核取方塊,則此方法會將 RichTextContentControl 加入文件目前的選取範圍,如果已清除核取方塊則會移除 RichTextContentControl

    internal void ToggleRichTextControlOnDocument()
    {
    
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyRichTextBoxControl";
    
        if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                    selection.Range, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    

儲存檔時移除按鈕控制件

在儲存文件然後關閉時,不會保存 Windows Forms 控制項。 不過,每個控制項的 ActiveX 包裝函式會保留在文件中,而當使用者重新開啟文件時,會看到這個包裝函式的框線。 有數種方式可以清除 VSTO 載入宏中動態建立的 Windows Forms 控制件。在本逐步解說中,您會以程序設計方式在儲存檔時移除 Button 控制件。

儲存文件時移除按鈕控制項

  1. 在 ThisAddIn.csThisAddIn.vb 程式代碼檔案中,將下列方法新增至 ThisAddIn 類別。 這個方法是 DocumentBeforeSave 事件的事件處理常式。 如果已儲存的文件有與它相關的 Document 主項目,事件處理常式會取得主項目並移除 Button 控制項 (如果存在的話)。

    private void Application_DocumentBeforeSave(Word.Document Doc, 
        ref bool SaveAsUI, ref bool Cancel)
    {
        bool isExtended = Globals.Factory.HasVstoObject(Doc);
    
    
        if (isExtended)
        {
    
            Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Doc);
    
            if (vstoDocument.Controls.Contains(button))
            {
                vstoDocument.Controls.Remove(button);
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
            }
        }
    }
    
  2. 在 C# 中,將下列程式碼加入 ThisAddIn_Startup 事件處理常式。 在 C# 中連接 Application_DocumentBeforeSave 事件處理常式和 DocumentBeforeSave 事件時需要此程式碼。

    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
    

當使用者按兩下功能區上的複選框時新增和移除控制件

最後,修改 Click 您新增至功能區複選框的事件處理程式,以新增或移除檔上的控件。

當使用者按兩下功能區上的複選框時新增或移除控制件

  1. MyRibbon.csMyRibbon.vb 程式代碼檔案中,以下列程式代碼取代產生的 addButtonCheckBox_ClickaddRichTextCheckBox_Click 事件處理程式。 此程式碼會重新定義這些事件處理常式,呼叫您稍早在本逐步解說中加入 ToggleButtonOnDocument 類別的 ToggleRichTextControlOnDocumentThisAddIn 方法。

    private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleButtonOnDocument();
    }
    
    private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleRichTextControlOnDocument();
    }
    

測試解決方案

從功能區上的自訂索引標籤選取控制項,將此控制項加入文件。 當您儲存文件時,會移除 Button 控制項。

若要測試方案

  1. F5 執行您的專案。

  2. 在使用中檔內,按 Enter 數次,將新的空白段落新增至檔。

  3. 選取第一個段落。

  4. 按一下 [增益集] 索引標籤。

  5. 在 [加入控制項] 群組中,按一下 [加入按鈕]

    按鈕隨即出現在第一個段落中。

  6. 選取最後一個段落。

  7. 在 [加入控制項] 群組中,按一下 [加入 RTF 控制項]

    Rich text 格式內容控制項會加入最後一個段落。

  8. 儲存文件。

    按鈕會從文件中移除。

下一步

您可以從下列主題進一步了解 VSTO 增益集的控制項:

  • 如需示範如何在運行時間將許多其他控件類型的控件新增至檔,並在重新開啟檔時重新建立控件的範例,請參閱 Office 開發範例和逐步解說中的 Word 載入宏動態控件範例。

  • 如需示範如何使用適用於 Excel 的 VSTO 載入宏將控件新增至工作表的逐步解說,請參閱 逐步解說:在 VSTO 載入宏專案中的運行時間將控件新增至工作表。