逐步解說:根據使用者內容變更執行窗格
重要事項:本主題中有關 Microsoft Word 的資訊是專門針對位於美國及其行政區以外之個人和組織的權益及使用所提供,或是針對使用 Microsoft 在 2010 年 1 月以前所授權之 Microsoft Word 產品或開發適用程式之個人和組織的權益及使用所提供,屆時 Microsoft 已從 Microsoft Word 中移除與自訂 XML 有關的特定功能實作。 這些有關 Microsoft Word 的資訊不得供位於美國或其行政區以內,使用 Microsoft 在 2010 年 1 月 10 日以後所授權之 Microsoft Word 產品或開發適用程式之個人或組織閱讀或使用。凡是在該日期以前授權或是針對在美國地區以外使用所購買並授權的這些產品,其行為將有所不同。
本逐步解說會示範如何回應 XMLNode 事件。 當使用者在文件中移動游標時,執行窗格上的控制項會隱藏或顯示出來。
**適用於:**本主題中的資訊適用於 Word 2007 和 Word 2010 的文件層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
這個逐步解說將說明下列工作:
將控制項加入至執行窗格。
在應用程式開啟時顯示執行窗格。
根據使用者在 XML 節點中的動作,隱藏和顯示執行窗格上的控制項。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
-
包含 Microsoft Office 開發者工具的 Visual Studio 2010 版本。 如需詳細資訊,請參閱[設定電腦以開發 Office 方案](bb398242\(v=vs.100\).md)。
- Word 2007 或 Word 2010。
建立專案
第一步就是建立 Word 文件專案。
若要建立新的專案
建立名為 My Dynamic Actions Pane 的 Word 文件專案。 在精靈中選取 [建立新文件]。 如需詳細資訊,請參閱 HOW TO:在 Visual Studio 中建立 Office 專案。
Visual Studio 會在設計工具中開啟新的 Word 文件,並將 My Dynamic Actions Pane 專案加入至 [方案總管]。
建立結構描述以對應至文件
若要建立 XML 節點,請將項目從 XML 結構描述拖曳至文件。 先建立結構描述檔、再建立對應於結構描述的文件,然後將項目對應至文件。
若要建立 XML 結構描述
在 [方案總管] 中選取 [My Dynamic Actions Pane] 專案。
按一下 [專案] 功能表上的 [加入新項目]。
[加入新項目] 對話方塊隨即出現。
選取 [範本] 窗格中的 [XML 結構描述]。
將結構描述命名為 ActionsPaneSample.xsd,並按一下 [加入]。
在 [方案總管] 中,以滑鼠右鍵按一下 ActionsPaneSample.xsd,然後按一下 [開啟方式]。
選取 [開啟方式] 對話方塊中的 [XML 編輯器],然後按一下 [確定]。
使用下列文字取代 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>
儲存您的專案。
將文字和 XML 加入至文件
本逐步解說的文件為備忘形式。 請將文字加入至文件,然後將 XML 項目對應至文件中的適當位置。
若要將文字加入至文件
在 [方案總管] 中,以滑鼠右鍵按一下 [ThisDocument.cs] 或 [ThisDocument.vb],然後按一下 [設計工具檢視]。
將下列文字加入至您的 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。 如需控制項的詳細資訊,請參閱主項目和主控制項概觀。
若要將結構描述附加到文件
按一下 [功能區] 上的 [開發人員] 索引標籤。
注意事項 如果 [開發人員] 索引標籤沒有顯示,您必須先使其顯示。 如需詳細資訊,請參閱 HOW TO:在功能區顯示開發人員索引標籤。
按一下 [XML] 群組中的 [結構描述]。
[範本與增益集] 對話方塊隨即開啟。
按一下 [範本與增益集] 對話方塊中的 [XML 結構描述] 索引標籤,然後按一下 [新增結構描述]。
瀏覽至您先前建立的 ActionsPaneSample.xsd 結構描述 (位在您的專案目錄中),然後按一下 [開啟]。
在 [結構描述設定] 對話方塊中,按一下 [確定]。
按一下 [確定],關閉 [範本與增益集] 對話方塊。
[XML 結構] 工作窗格隨即開啟。
若要將 XML 項目對應至文件
在 [XML 結構] 工作窗格中,按一下 [範例] 項目。
出現提示時,按一下 [套用至整份文件]。
選取 To、From 和 Subject 這三行,然後按一下 [XML 結構] 工作窗格中的 [插入] 項目。
將游標放在 To: 後面,按兩次 TAB 鍵,然後按一下 [MemoTo] 項目將其插入。
將游標放在 From: 後面,按兩次 TAB 鍵,然後按一下 [MemoFrom] 項目。
將游標放在 Subject: 後面,按兩次 TAB 鍵,然後按一下 [MemoSubject] 項目。
選取表格,使整個表格反白顯示,然後按一下 [表格] 項目加以套用。
XML 標記會顯示在表格儲存格內。
清除 [顯示文件中的 XML 標記] 核取方塊。
在 [XML 結構] 工作窗格底部,按一下 [XML 選項]。
選取 [忽略混合的內容] 核取方塊,然後按一下 [確定]。
關閉 [XML 結構] 工作窗格。
將控制項加入至執行窗格
若要設計執行窗格上控制項的配置,您可以使用稱為執行窗格控制項之控制項的設計工具,該控制項基本上與使用者控制項相同。 您可以將其他控制項 (例如按鈕和文字方塊) 拖曳至執行窗格控制項上並加以排列。 若要根據使用者內容變更執行窗格,您可以針對每種內容各加入和設計一個執行窗格控制項,然後視情況予以顯示和隱藏。
本逐步解說會使用三個執行窗格控制項。 第一個執行窗格控制項包含三個文字方塊和一個按鈕,好讓使用者輸入資料並將其加入至文件。 第二個執行窗格控制項包含一個可開啟 [表格屬性] 對話方塊的按鈕。 第三個執行窗格控制項包含一個核取方塊,可顯示執行窗格上的所有控制項,無論游標位在文件中的何處。
若要加入執行窗格控制項
在 [方案總管] 中選取 [My Dynamic Actions Pane] 專案。
按一下 [專案] 功能表上的 [加入新項目]。
在 [加入新項目] 對話方塊中,選取 [執行窗格控制項],將其命名為 AddTextControl,然後按一下 [加入]。
將執行窗格控制項的 [Size] 屬性變更為 170, 135。
若要將 Windows Form 控制項加入至第一個執行窗格控制項
從 [工具箱] 的 [Windows Form] 索引標籤,將 [Label] 控制項拖曳到 [AddTextControl],然後將 [Text] 屬性變更為 To:。
將 [Textbox] 控制項加入 [AddTextControl],並變更下列屬性。
屬性
值
Name
toBox
Size
110, 20
將第二個 [Label] 控制項加入 [AddTextControl],並將 [Text] 屬性會變更為 From:。
將第二個 [Textbox] 控制項加入 [AddTextControl],並變更下列屬性。
屬性
值
Name
fromBox
Size
110, 20
將第三個 [Label] 控制項加入先前文字方塊底下的 [AddTextControl],並將 [Text] 屬性變更為 Subject:。
將第三個 [Textbox] 控制項加入先前標籤旁邊的 [AddTextControl],並變更下列屬性。
屬性
值
Name
subjectBox
Multiline
True
Size
110, 40
調整 [subjectBox] 文字方塊的大小,以允許顯示多行。
將 [Button] 控制項加入至 [AddTextControl],並變更下列屬性。
屬性
值
Name
insertText
Text
插入
若要建立第二個執行窗格控制項
將第二個執行窗格控制項加入您的專案,並將其命名為 ShowPropertiesControl。
將執行窗格控制項的 [Size] 屬性變更為 170, 50。
從 [工具箱] 的 [Windows Form] 索引標籤,將 [Button] 控制項拖曳至 [ShowPropertiesControl],然後變更下列屬性。
屬性
值
Name
tableProperties
Text
表格內容
Enabled
False
Size
100, 23
如果是 C#,請將按鈕的 [Modifiers] 屬性變更為 Internal。
若要建立第三個執行窗格控制項
將第三個執行窗格控制項加入您的專案,並將其命名為 ShowAllControl。
將執行窗格控制項的 [Size] 屬性變更為 170, 75。
從 [工具箱] 的 [Windows Forms] 索引標籤,將 [GroupBox] 控制項加入至 [ShowAllControl],然後將 [Text] 屬性變更為 My Actions Pane。
將 [CheckBox] 控制項加入至群組方塊最上方的 [ShowAllControl],並變更下列屬性。
屬性
值
Name
showCheck
Text
顯示所有控制項
如果是 C#,請將核取方塊的 [Modifiers] 屬性變更為 Internal。
加入程式碼以回應使用者內容
您現在可以撰寫程式碼,以顯示執行窗格並根據文件中的游標位置,加入和移除執行窗格控制項。 程式碼要寫在 XMLNode 控制項的事件處理常式中。
若要將程式碼加入至 XMLNode 控制項事件
以滑鼠右鍵按一下 [方案總管] 中的 [ThisDocument.vb] 或 [ThisDocument.cs],然後按一下 [檢視程式碼]。
在 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();
在 ThisDocument 的 Startup 事件處理常式中,撰寫下列程式碼,以加入 ShowAllControl 控制項並顯示執行窗格。
Me.ActionsPane.Controls.Add(showAll) showCheck = showAll.showCheck
this.ActionsPane.Controls.Add(showAll);
注意事項 控制項加入執行窗格的順序會決定其位置。 如果某個控制項永遠要在執行窗格的最上方顯示,則應該先將其加入, 順序也與執行窗格的 StackOrder 屬性具相依性。 如需詳細資訊,請參閱 HOW TO:管理執行窗格的控制項配置。
將下列程式碼加入至 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); } }
將下列程式碼加入至 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); } }
將下列程式碼加入至 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; }
將下列程式碼加入至 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; }
在 C# 中,您必須加入 XMLNode 控制項的事件處理常式。 您可以將這個程式碼放在 ThisDocument 的 Startup 事件處理常式中。 如需建立事件處理常式的詳細資訊,請參閱 HOW TO:在 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);
檢查點
儲存您的專案,並驗證執行窗格控制項是否會隨著您移動文件中的游標而變更。
若要測試您的專案
請按 F5 執行您的專案。
將插入點移至 To 一字,並確認可以在執行窗格上看見 addText 執行窗格控制項。
將插入點移至表格內部,並確認可以在執行窗格上看見 showProperties 執行窗格控制項。
將插入點移至 MEMORANDUM 一字,並確認不會在執行窗格上看見 addText 或 showProperties 執行窗格控制項。
加入程式碼以回應執行窗格上的控制項事件
到目前為止,執行窗格上的控制項什麼作用也沒有。 最後一個步驟就是撰寫程式碼以顯示所有控制項、插入文字,以及顯示 [表格屬性] 對話方塊。
若要在執行窗格上顯示所有控制項
將下列程式碼加入至 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); } }
在 C# 中,您必須加入 checkbox 控制項的事件處理常式。 您可以將這個程式碼放在 ThisDocument 的 Startup 事件處理常式中。
showAll.showCheck.CheckStateChanged += new EventHandler(showCheck_CheckStateChanged);
若要在按下插入按鈕時插入文字
以滑鼠右鍵按一下 [方案總管] 中的 [AddTextControl.vb] 或 [AddTextControl.cs],然後按一下 [檢視程式碼]。
在 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 = ""; }
在 C# 中,您必須加入按鈕的事件處理常式。 您可以在 AddTextControl 建構函式 (Constructor) 中 (在 InitializeComponent 呼叫之後) 加入這個程式碼。
public AddTextControl() { InitializeComponent(); this.insertText.Click += new System.EventHandler(this.insertText_Click); }
若要顯示表格屬性對話方塊
以滑鼠右鍵按一下 [方案總管] 中的 [ShowPropertiesControl.vb] 或 [ShowPropertiesControl.cs],然後按一下 [檢視程式碼]。
將下列程式碼加入至 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); }
在 C# 中,您必須加入按鈕的事件處理常式。 您可以在呼叫 InitializeComponent 之後,將這個程式碼放在 ShowPropertiesControl 建構函式中。
public ShowPropertiesControl() { InitializeComponent(); this.tableProperties.Click += new System.EventHandler(this.tableProperties_Click); }
測試應用程式
現在您可進一步測試文件,以驗證執行窗格控制項的功能。
若要測試您的文件
請按 F5 執行您的專案。
確認可以看見執行窗格。
將游標移至包含 [To]、[From] 和 [Subject] 行的文件區段,並確認 addText 控制項顯示在執行窗格上。
在執行窗格上的 [To]、[From] 和 [Subject] 文字方塊中輸入文字,然後按一下 [插入]。
將游標移至表格,並確認 showProperties 控制項顯示在執行窗格上。
按一下 [表格屬性] 按鈕,並確認 [表格屬性] 對話方塊開啟。
按一下 [全部顯示] 核取方塊,並確認可在執行窗格上看見所有控制項。
將游標移到表格之外,並確認 [表格屬性] 按鈕變成停用。
後續步驟
這個逐步解說顯示根據使用者內容變更執行窗格的基本概念。 以下則是接下來的一些工作:
將資料繫結至 Word 中的控制項。 如需詳細資訊,請參閱 逐步解說:在 Word 執行窗格將資料繫結至控制項。
將資料繫結至 Excel 中的控制項。 如需詳細資訊,請參閱 逐步解說:將資料繫結至 Excel 執行窗格上的控制項。
部署專案。 如需詳細資訊,請參閱 部署概觀 (Visual Studio 中的 Office 程式開發)。