逐步解說:根據使用者內容變更執行窗格

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 文件層級專案

Microsoft Office 版本

  • Word 2007

  • Word 2003

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

本逐步解說會示範如何回應 XMLNode 事件。當使用者在文件中移動游標時,執行窗格上的控制項會隱藏或顯示出來。

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

  • 將控制項加入至執行窗格。

  • 在應用程式開啟時顯示執行窗格。

  • 根據使用者在 XML 節點中的動作,隱藏和顯示執行窗格上的控制項。

注意事項:

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

必要條件

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

  • Visual Studio Tools for Office (Visual Studio 2008 Professional 和 Visual Studio Team System 的選擇性元件)。

  • Microsoft Office Word 2003

注意事項:

您也可以使用 Word 2007 執行本逐步解說。但是,有些指示會假設您是使用 Word 2003 的功能表。

根據預設會隨所列出的 Visual Studio 版本安裝 Visual Studio Tools for Office。若要查看是否已安裝,請參閱 安裝 Visual Studio Tools for Office

建立專案

第一步就是建立 Word 文件專案。

若要建立新的專案

  • 建立名為 My Dynamic Actions Pane 的 Word 文件專案。在精靈中選取 [建立新文件]。如需詳細資訊,請參閱 HOW TO:建立 Visual Studio Tools for Office 專案

    Visual Studio 會在設計工具中開啟新的 Word 文件,並將 My Dynamic Actions Pane 專案加入 [方案總管]。

建立結構描述以對應至文件

若要建立 XML 節點,請將項目從 XML 結構描述拖曳至文件。先建立結構描述檔、再建立對應於結構描述的文件,然後將項目對應至文件。

若要建立 XML 結構描述

  1. 在 [方案總管] 中選取 [My Dynamic Actions Pane] 專案。

  2. 按一下 [專案] 功能表上的 [加入新項目]。

    [加入新項目] 對話方塊隨即出現。

  3. 選取 [範本] 窗格中的 [XML 結構描述]。

  4. 將結構描述命名為 ActionsPaneSample.xsd,並按一下 [加入]。

  5. 在 [方案總管] 中,以滑鼠右鍵按一下 ActionsPaneSample.xsd,然後按一下 [開啟方式]。

  6. 選取 [開啟方式] 對話方塊中的 [XML 編輯器],然後按一下 [確定]。

  7. 使用下列文字取代 XML 編輯器中的文字。

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="https://schemas.microsoft.com/vsto/samples" elementFormDefault="qualified"
        xmlns="https://schemas.microsoft.com/vsto/samples"
        xmlns:mstns="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Sample" type="SampleType"></xs:element>
      <xs:complexType name="SampleType">
        <xs:all>
          <xs:element name="Insert" type="InsertType" minOccurs="0" maxOccurs="1" />
          <xs:element name="Table" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:all>
      </xs:complexType>
      <xs:complexType name="InsertType">
        <xs:sequence>
          <xs:element name="MemoTo" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoFrom" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoSubject" type="xs:string" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
    
  8. 儲存您的專案。

將文字和 XML 加入至文件

本逐步解說的文件為備忘形式。請將文字加入至文件,然後將 XML 項目對應至文件中的適當位置。

若要將文字加入至文件

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [ThisDocument.cs] 或 [ThisDocument.vb],然後按一下 [設計工具檢視]。

  2. 將下列文字加入至您的 Word 文件。

    MEMORANDUM

    To:

    From:

    Subject:

    The following table lists the contact information you requested:

    Name

    Address

    City

    State

    Postal Code

    Nancy Davolio

    507 - 20th Ave. E., Apt.2A

    Seattle

    WA

    98122

接下來,將 XML 項目對應至備忘中的文字。針對您所對應的每個 XML 項目,會建立 XMLNode 控制項。XMLNode 控制項的命名方式,是附加父項目和子項目名稱至 Node 一字。例如,如果您從以上的結構描述對應 Insert 項目,則會將其命名為 SampleInsertNode。如需控制項的詳細資訊,請參閱主項目和主控制項概觀

若要將結構描述附加到文件

  1. 開啟 [範本與增益集] 對話方塊。若要在 Word 2007 中進行這項工作:

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

      注意事項:

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

    2. 按一下 [XML] 群組中的 [結構描述]。

      [範本與增益集] 對話方塊隨即開啟。

    若要在 Word 2003 中開啟 [範本與增益集] 對話方塊:

    1. 在 [工具] 功能表上,指向 [Microsoft Office Word 工具],然後按一下 [範本與增益集]。

      [範本與增益集] 對話方塊隨即開啟。

      注意事項:

      如果 [工具] 功能表上沒有 [Microsoft Office Word 工具],請按一下文件使其取得焦點。如需詳細資訊,請參閱在 Visual Studio 環境下的 Office 功能表

  2. 按一下 [範本與增益集] 對話方塊中的 [XML 結構描述] 索引標籤,然後按一下 [新增結構描述]。

  3. 瀏覽至您先前建立的 ActionsPaneSample.xsd 結構描述 (位在您的專案目錄中),然後按一下 [開啟]。

  4. 在 [結構描述設定] 對話方塊中,按一下 [確定]。

  5. 按一下 [確定],關閉 [範本與增益集] 對話方塊。

    [XML 結構] 工作窗格隨即開啟。

若要將 XML 項目對應至文件

  1. 在 [XML 結構] 工作窗格中,按一下 [範例] 項目。

  2. 出現提示時,按一下 [套用至整份文件]。

  3. 選取 To、From 和 Subject 這三行,然後按一下 [XML 結構] 工作窗格中的 [插入] 項目。

  4. 將游標放在 To: 後面,按兩次 TAB 鍵,然後按一下 [MemoTo] 項目將其插入。

  5. 將游標放在 From: 後面,按兩次 TAB 鍵,然後按一下 [MemoFrom] 項目。

  6. 將游標放在 Subject: 後面,按兩次 TAB 鍵,然後按一下 [MemoSubject] 項目。

  7. 選取表格,使整個表格反白顯示,然後按一下 [表格] 項目加以套用。

    XML 標記會顯示在表格儲存格內。

  8. 清除 [顯示文件中的 XML 標記] 核取方塊。

  9. 在 [XML 結構] 工作窗格底部,按一下 [XML 選項]。

  10. 選取 [忽略混合的內容] 核取方塊,然後按一下 [確定]。

  11. 關閉 [XML 結構] 工作窗格。

將控制項加入至執行窗格

若要設計執行窗格上控制項的配置,您可以使用稱為執行窗格控制項之控制項的設計工具,該控制項基本上與使用者控制項相同。您可以將其他控制項 (例如按鈕和文字方塊) 拖曳至執行窗格控制項上並加以排列。若要根據使用者內容變更執行窗格,您可以針對每種內容各加入和設計一個執行窗格控制項,然後視情況予以顯示和隱藏。

本逐步解說會使用三個執行窗格控制項。第一個執行窗格控制項包含三個文字方塊和一個按鈕,好讓使用者輸入資料並將其加入至文件。第二個執行窗格控制項包含一個可開啟 [表格屬性] 對話方塊的按鈕。第三個執行窗格控制項包含一個核取方塊,可顯示執行窗格上的所有控制項,無論游標位在文件中的何處。

若要加入執行窗格控制項

  1. 在 [方案總管] 中選取 [My Dynamic Actions Pane] 專案。

  2. 按一下 [專案] 功能表上的 [加入新項目]。

  3. 在 [加入新項目] 對話方塊中,選取 [執行窗格控制項],將其命名為 AddTextControl,然後按一下 [加入]。

  4. 將執行窗格控制項的 [Size] 屬性變更為 170, 135。

若要將 Windows Form 控制項加入至第一個執行窗格控制項

  1. 從 [工具箱] 的 [Windows Form] 索引標籤,將 [Label] 控制項拖曳到 [AddTextControl],然後將 [Text] 屬性變更為 To:。

  2. 將 [Textbox] 控制項加入 [AddTextControl],並變更下列屬性。

    屬性

    Name

    toBox

    Size

    110, 20

  3. 將第二個 [Label] 控制項加入 [AddTextControl],並將 [Text] 屬性會變更為 From:。

  4. 將第二個 [Textbox] 控制項加入 [AddTextControl],並變更下列屬性。

    屬性

    Name

    fromBox

    Size

    110, 20

  5. 將第三個 [Label] 控制項加入先前文字方塊底下的 [AddTextControl],並將 [Text] 屬性變更為 Subject:。

  6. 將第三個 [Textbox] 控制項加入先前標籤旁邊的 [AddTextControl],並變更下列屬性。

    屬性

    Name

    subjectBox

    Multiline

    True

    Size

    110, 40

  7. 調整 [subjectBox] 文字方塊的大小,以允許顯示多行。

  8. 將 [Button] 控制項加入至 [AddTextControl],並變更下列屬性。

    屬性

    Name

    insertText

    Text

    Insert

若要建立第二個執行窗格控制項

  1. 將第二個執行窗格控制項加入您的專案,並將其命名為 ShowPropertiesControl。

  2. 將執行窗格控制項的 [Size] 屬性變更為 170, 50。

  3. 從 [工具箱] 的 [Windows Form] 索引標籤,將 [Button] 控制項拖曳至 [ShowPropertiesControl],然後變更下列屬性。

    屬性

    Name

    tableProperties

    Text

    Table Properties

    Enabled

    False

    Size

    100, 23

  4. 如果是 C#,請將按鈕的 [Modifiers] 屬性變更為 Internal。

若要建立第三個執行窗格控制項

  1. 將第三個執行窗格控制項加入您的專案,並將其命名為 ShowAllControl。

  2. 將執行窗格控制項的 [Size] 屬性變更為 170, 75。

  3. 從 [工具箱] 的 [Windows Form] 索引標籤,將 [GroupBox] 控制項拖曳至 [ShowAllControl],然後將 [Text] 屬性變更為 My Actions Pane。

  4. 將 [CheckBox] 控制項加入至群組方塊最上方的 [ShowAllControl],並變更下列屬性。

    屬性

    Name

    showCheck

    Text

    Show All Controls

  5. 如果是 C#,請將核取方塊的 [Modifiers] 屬性變更為 Internal。

加入程式碼以回應使用者內容

您現在可以撰寫程式碼,以顯示執行窗格並根據文件中的游標位置,加入和移除執行窗格控制項。程式碼要寫在 XMLNode 控制項的事件處理常式中。

若要將程式碼加入至 XMLNode 控制項事件

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [ThisDocument.vb] 或 [ThisDocument.cs],然後按一下 [檢視程式碼]。

  2. 在 ThisDocument 的宣告區段中,為每個執行窗格控制項建立變數參考。

    Dim addText As New AddTextControl
    Dim showProperties As New ShowPropertiesControl
    Dim showAll As New ShowAllControl
    
    Friend WithEvents showCheck As System.Windows.Forms.CheckBox
    
    private AddTextControl addText = new AddTextControl();
    private ShowPropertiesControl showProperties = new ShowPropertiesControl();
    private ShowAllControl showAll = new ShowAllControl();
    
  3. 在 ThisDocument 的 Startup 事件處理常式中,撰寫下列程式碼,以加入 ShowAllControl 控制項並顯示執行窗格。

    Me.ActionsPane.Controls.Add(showAll)
    showCheck = showAll.showCheck
    
    this.ActionsPane.Controls.Add(showAll);
    
    注意事項:

    控制項加入執行窗格的順序會決定其位置。如果某個控制項永遠要在執行窗格的最上方顯示,則應該先將其加入,順序也與執行窗格的 StackOrder 屬性具相依性。如需詳細資訊,請參閱 HOW TO:管理執行窗格的控制項配置

  4. 將下列程式碼加入至 SampleInsertNode 控制項的 ContextEnter 事件處理常式。

    Private Sub SampleInsertNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void SampleInsertNode_ContextEnter(object sender, 
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  5. 將下列程式碼加入至 SampleInsertNode 控制項的 ContextLeave 事件處理常式,以在使用者將游標移到這個 XML 節點外之後,隱藏控制項。

    Private Sub SampleInsertNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
        End If
    End Sub
    
    private void SampleInsertNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
        }
    }
    
  6. 將下列程式碼加入至 SampleTableNode 控制項的 ContextEnter 事件處理常式。

    Private Sub SampleTableNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = True
    End Sub
    
    private void SampleTableNode_ContextEnter(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        showProperties.tableProperties.Enabled = true;
    }
    
  7. 將下列程式碼加入至 SampleTableNode 控制項的 ContextLeave 事件處理常式,以在使用者將游標移到此 XML 節點外之後,隱藏控制項。

    Private Sub SampleTableNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = False
    End Sub
    
    private void SampleTableNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(showProperties);
        }
        showProperties.tableProperties.Enabled = false;
    }
    
  8. 在 C# 中,您必須加入 XMLNode 控制項的事件處理常式。您可以將這個程式碼放在 ThisDocument 的 Startup 事件處理常式中。如需建立事件處理常式的詳細資訊,請參閱 HOW TO:在 Visual Studio Tools for Office 中建立事件處理常式

    this.SampleInsertNode.ContextEnter += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextEnter);
    
    this.SampleInsertNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextLeave);
    
    this.SampleTableNode.ContextEnter += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextEnter);
    
    this.SampleTableNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextLeave);
    

檢查點

儲存您的專案,並驗證執行窗格控制項是否會隨著您移動文件中的游標而變更。

若要測試您的專案

  1. 請按 F5 執行您的專案。

  2. 將插入點移至 To 一字,並確認可以在執行窗格上看見 addText 執行窗格控制項。

  3. 將插入點移至表格內部,並確認可以在執行窗格上看見 showProperties 執行窗格控制項。

  4. 將插入點移至 MEMORANDUM 一字,並確認不會在執行窗格上看見 addText 或 showProperties 執行窗格控制項。

加入程式碼以回應執行窗格上的控制項事件

到目前為止,執行窗格上的控制項什麼作用也沒有。最後一個步驟就是撰寫程式碼以顯示所有控制項、插入文字,以及顯示 [表格屬性] 對話方塊。

若要在執行窗格上顯示所有控制項

  1. 將下列程式碼加入至 ThisDocument。

    Private Sub showCheck_CheckStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles showCheck.CheckStateChanged
    
        If showAll.showCheck.Checked = True Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        Else
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void showCheck_CheckStateChanged(object sender, EventArgs e)
    {
        if (showAll.showCheck.Checked)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        else
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  2. 在 C# 中,您必須加入 checkbox 控制項的事件處理常式。您可以將這個程式碼放在 ThisDocument 的 Startup 事件處理常式中。

    showAll.showCheck.CheckStateChanged += new EventHandler(showCheck_CheckStateChanged);
    

若要在按下插入按鈕時插入文字

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [AddTextControl.vb] 或 [AddTextControl.cs],然後按一下 [檢視程式碼]。

  2. 在 insertText 按鈕的 Click 事件處理常式中,撰寫下列程式碼。

    Private Sub insertText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles insertText.Click
    
        With Globals.ThisDocument
            .InsertMemoFromNode.Text = Me.fromBox.Text
            .InsertMemoToNode.Text = Me.toBox.Text
            .InsertMemoSubjectNode.Text = Me.subjectBox.Text
        End With
    
        ' Clear the text boxes.
        Me.fromBox.Text = ""
        Me.toBox.Text = ""
        Me.subjectBox.Text = ""
    End Sub
    
    private void insertText_Click(object sender, System.EventArgs e)
    {
        Globals.ThisDocument.InsertMemoFromNode.Text = this.fromBox.Text;
        Globals.ThisDocument.InsertMemoToNode.Text = this.toBox.Text;
        Globals.ThisDocument.InsertMemoSubjectNode.Text = this.subjectBox.Text;
    
        // Clear the text boxes.
        this.fromBox.Text = "";
        this.toBox.Text = "";
        this.subjectBox.Text = "";
    }
    
  3. 在 C# 中,您必須加入按鈕的事件處理常式。您可以在 AddTextControl 建構函式 (Constructor) 中 (在 InitializeComponent 呼叫之後) 加入這個程式碼。

    public AddTextControl()
    {
        InitializeComponent();
        this.insertText.Click += new System.EventHandler(this.insertText_Click);
    }
    

若要顯示表格屬性對話方塊

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [ShowPropertiesControl.vb] 或 [ShowPropertiesControl.cs],然後按一下 [檢視程式碼]。

  2. 將下列程式碼加入至 tableProperties 按鈕的 Click 事件處理常式。

    Private Sub tableProperties_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles tableProperties.Click
    
        Globals.ThisDocument.Application.Dialogs( _
            Word.WdWordDialog.wdDialogTableProperties).Show()
    End Sub
    
    private void tableProperties_Click(object sender, System.EventArgs e)
    {
        object timeout = 0;
    
        Globals.ThisDocument.Application.Dialogs[
            Microsoft.Office.Interop.Word.WdWordDialog.wdDialogTableProperties]
                .Show(ref timeout);
    }
    
  3. 在 C# 中,您必須加入按鈕的事件處理常式。您可以在呼叫 InitializeComponent 之後,將這個程式碼放在 ShowPropertiesControl 建構函式中。

    public ShowPropertiesControl()
    {
        InitializeComponent();
        this.tableProperties.Click += new System.EventHandler(this.tableProperties_Click);
    }
    

測試應用程式

現在您可進一步測試文件,以驗證執行窗格控制項的功能。

若要測試您的文件

  1. 請按 F5 執行您的專案。

  2. 確認可以看見執行窗格。

  3. 將游標移至包含 [To]、[From] 和 [Subject] 行的文件區段,並確認 addText 控制項顯示在執行窗格上。

  4. 在執行窗格上的 [To]、[From] 和 [Subject] 文字方塊中輸入文字,然後按一下 [插入]。

  5. 將游標移至表格,並確認 showProperties 控制項顯示在執行窗格上。

  6. 按一下 [表格屬性] 按鈕,並確認 [表格屬性] 對話方塊開啟。

  7. 按一下 [全部顯示] 核取方塊,並確認可在執行窗格上看見所有控制項。

  8. 將游標移到表格之外,並確認 [表格屬性] 按鈕變成停用。

後續步驟

這個逐步解說顯示根據使用者內容變更執行窗格的基本概念。以下則是接下來的一些工作:

請參閱

工作

HOW TO:將執行窗格加入至 Word 文件

HOW TO:將執行窗格加入至 Excel 活頁簿

HOW TO:管理執行窗格的控制項配置

概念

執行窗格概觀

XMLNodes 控制項