動作窗格概觀

動作窗格是附加到特定的 Microsoft Office Word 文件或 Excel 活頁簿的可自訂 [文件動作] 工作窗格。 動作窗格以及其他內建工作窗格裝載於 Office 工作窗格內,例如:Excel 中的 [XML 來源] 工作窗格,或 Word 中的 [樣式與格式] 工作窗格。 您可以使用 Windows Form 控制項或 WPF 控制項,設計執行窗格使用者介面。

適用對象:本主題資訊適用於 Excel 及 Word 的文件層級專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

您可以只為 Word 或 Excel 建立文件層級自訂的執行窗格。 您無法在 VSTO 增益集中建立執行窗格。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

注意

執行窗格與自訂工作窗格不同。 自訂工作窗格是與應用程式相關聯,而非特定的文件。 您可以為某些 Microsoft Office 應用程式,在 VSTO 增益集中建立自訂工作窗格。 如需詳細資訊,請參閱自訂工作窗格

顯示動作窗格

執行窗格由 ActionsPane 類別代表。 當您建立文件層級專案時,在專案中使用 ThisWorkbook 類別 (Excel) 或 ThisDocument 類別 (Word) 的 ActionsPane 欄位,就可在程式碼中使用這個類別的執行個體。 若要顯示執行窗格,請將 Windows Form 控制項加入 ActionsPane 欄位的 Controls 屬性。 下列程式碼範例會將名為 actions 的控制項加入執行窗格。

this.ActionsPane.Controls.Add(actions);

當您明確將控制項新增至動作窗格時,在執行階段時就會見到該窗格。 當執行窗格出現後,您可以動態加入或移除控制項,以回應使用者的動作。 一般而言,加入程式碼是為了在 ThisDocumentThisWorkbookStartup 事件處理常式中顯示執行窗格,讓使用者第一次開啟文件時即看見執行窗格。 不過,您可能希望執行窗格只在回應文件中的使用者動作時才出現。 例如,您可能會在文件的控制項 Click 事件中加入程式碼。

將多個控制項新增至動作窗格

當您將多個控制項新增至動作窗格時,應將這些控制項分組到一個使用者控制項中,然後將該使用者控制項新增至 Controls 屬性。 這個程序包括下列步驟:

  1. 透過將 [動作窗格控制項] 或 [使用者控制項] 項目新增至專案,以建立動作窗格窗格的使用者介面 (UI)。 這兩個項目都包含自訂的 Windows Form UserControl 類別。 [動作窗格控制項] 和 [使用者控制項] 項目是相等的;唯一的差異在於他們的名稱。

  2. 使用設計工具或撰寫程式碼,將 Windows Form 控制項加入 UserControl

    注意

    您也可以藉由將 WPF UserControl 加入 Windows Form UserControl,在執行窗格中加入 WPF 控制項。 如需詳細資訊,請參閱在 Office 方案中使用 WPF 控制項

  3. 在專案的 ThisWorkbook (Excel) 或 ThisDocument (Word) 類別 ActionsPane 欄位所包含的控制項中,加入自訂使用者控制項的執行個體。

    如需更詳細示範此程式的範例,請參閱如何:將動作窗格加入至 Word 文件或 Excel 活頁簿

隱藏動作窗格

雖然 ActionsPane 類別具有 Hide 方法和 Visible 屬性,但您不能使用 ActionsPane 類別本身的任何成員,從使用者介面移除執行窗格。 呼叫 Hide 方法或將 Visible 屬性設定為 [false] 只會隱藏動作窗格上的控制項,並不會隱藏工作窗格。

若要隱藏解決方案中的工作窗格,您有數個選項:

  • 對於 Word,將代表 [文件動作] 工作窗格的 TaskPane 物件之 Visible 屬性設定為 [false]。 下列程式碼範例宜從專案的 ThisDocument 類別執行。

    this.Application.TaskPanes[Word.WdTaskPanes.wdTaskPaneDocumentActions].Visible = false;
    
  • 對於 Excel,將 Application 物件的 DisplayDocumentActionTaskPane 屬性設定為 [false]。 下列程式碼範例宜從專案的 ThisWorkbook 類別執行。

    this.Application.DisplayDocumentActionTaskPane = false;
    
  • 對於 Word 或 Excel,您也可以將命令行的 Visible 屬性設定為 [false]。 下列程式碼範例宜從專案的 ThisDocumentThisWorkbook 類別執行。

    this.Application.CommandBars["Task Pane"].Visible = false;
    

開啟文件時清除動作窗格

當使用者在可看見動作窗格時儲存文件時,每次開啟文件時都會顯示動作窗格,無論動作窗格是否包含任何控制項。 如果想要控制其出現時機,請呼叫 ThisDocumentThisWorkbookStartup 事件處理常式中 ActionsPane 欄位的 Clear 方法,以確保文件開啟時不顯示執行窗格。

決定動作窗格何時關閉

執行窗格關閉時未引發任何事件。 雖然 ActionsPane 類別具有 VisibleChanged 事件,但當使用者關閉執行窗格時並未引發這個事件。 當透過呼叫 Hide 方法或將 Visible 屬性設為 [false] 來隱藏動作窗格上的控制項時,會引發這個事件。

當使用者動作窗格時,使用者可以在應用程式的使用者介面 (UI) 中執行下列其中一個程式,以再次顯示它。

使用 Word 或 Excel 的 UI 顯示執行窗格
  1. 按一下 [功能區] 上的 [檢視] 索引標籤。

  2. 在 [顯示/隱藏] 群組中,按一下 [文件動作] 切換按鈕。

針對動作窗格事件進行程式設計

您可以將多個使用者控制項加入執行窗格,然後撰寫程式碼顯示和隱藏使用者控制項,來回應文件上的事件。 如果您將 XML 結構描述元素對應至文件,每當插入點位於其中一個 XML 元素內時,即可在執行窗格中顯示特定的使用者控制項。 如需詳細資訊,請參閱如何:在 Visual Studio 內將結構描述對應至 Word 文件,以及如何:在 Visual Studio 內將結構描述對應至工作表

您也可以撰寫程式碼來回應任何物件的事件,包括主控制項、應用程式或文件事件。 如需詳細資訊,請參閱 逐步解說:針對 NamedRange 控制項的事件進行程式設計

將資料繫結至動作窗格上的控制項

執行窗格上的控制項和 Windows Form 上的控制項具有相同的資料繫結功能。 您可以將控制項繫結至資料來源,例如資料集、具類型資料集和 XML。 如需詳細資訊,請參閱資料繫結和 Windows Forms

您可以將執行窗格上的控制項和文件上的控制項繫結至相同的資料集。 例如,您可以在執行窗格的控制項和工作表的控制項之間,建立主要/詳細資料關聯。 有關更多資訊,請參見 逐步解說:將資料繫結至 Excel 動作窗格上的控制項

驗證動作窗格控制項中的資料

如果在動作窗格控制項的 Validating 事件處理常式中顯示訊息方塊,當焦點從控制項移到訊息方塊時,可能會再次引發該事件。 若要避免這個問題發生,請使用 ErrorProvider 控制項顯示所有的驗證錯誤訊息。

使用者控制堆疊順序

如果您使用多個使用者控制項,無論執行窗格是垂直或水平停駐,您都可以撰寫程式碼,在執行窗格上適當堆疊使用者控制項。 您可以使用 StackOrder 屬性的 StackStyle 列舉,設定執行窗格上的使用者控制項堆疊順序。 如需詳細資訊,請參閱如何:管理動作窗格的控制項配置

StackOrder 屬性可以接受下列 StackStyle 列舉值。

堆疊樣式 定義
FromBottom 從執行窗格底部堆疊。
FromLeft 從執行窗格左邊堆疊。
FromRight 從執行窗格右邊堆疊。
FromTop 從執行窗格頂端堆疊。
未定義堆疊順序,順序由開發人員控制。

下列程式碼設定 StackOrder 屬性從執行窗格頂端開始堆疊使用者控制項。

this.ActionsPane.StackOrder = Microsoft.Office.Tools.StackStyle.FromTop;

錨點控制項

如果使用者在執行階段調整動作窗格的大小,則控制項可以隨著動作窗格來調整大小。 您可以使用 Windows Form 控制項的 Anchor 屬性,將控制項錨定到執行窗格。 您也可以相同方式將 Windows Form 控制項錨定到使用者控制項。 如需詳細資訊,請參閱如何:錨定 Windows Form 上的控制項

調整動作窗格的大小

您不能直接變更 ActionsPane 的大小,因為 ActionsPane 內嵌在工作窗格中。 不過,您可設定代表工作窗格之 CommandBarWidth 屬性,以程式設計方式變更工作窗格的寬度。 如果工作窗格以水平方式停駐或浮動,您可以變更其高度。

不建議以程式設計方式調整工作窗格的大小,因為使用者應該能夠選取最符合其需求的工作窗格大小。 不過,如果必須調整工作窗格的寬度,您可以使用下列程式碼完成這項工作。

this.CommandBars["Task Pane"].Width = 200;

重新定位動作窗格

您無法直接重新置放 ActionsPane,因為它內嵌在工作窗格中。 不過,您可設定代表工作窗格之 CommandBarPosition 屬性,以程式設計方式移動工作窗格。

不建議以程式設計方式重新定位工作窗格,因為使用者應該能夠在螢幕上選擇最適合其需求的工作窗格位置。 不過,如果必須將工作窗格移至特定位置,您可以使用下列程式碼完成這項工作。

this.CommandBars["Task Pane"].Position =
    Microsoft.Office.Core.MsoBarPosition.msoBarLeft;

注意

使用者可以隨時手動重新置放工作窗格。 沒有任何方式可以確保工作窗格會一直停駐在您以程式設計方式指定的位置上。 不過,您可以檢查方向的變更,確保執行窗格上的控制項依正確的方向堆疊。 如需詳細資訊,請參閱如何:管理動作窗格的控制項配置

設定 ActionsPaneTopLeft 屬性並不會變更其位置,因為 ActionsPane 物件內嵌在工作窗格中。

如果工作窗格未停駐,您可以設定代表工作窗格之 CommandBarTopLeft 屬性。 下列程式碼會將未停駐的工作窗格移至文件的左上角。

if (this.CommandBars["Task Pane"].Position == 
    Microsoft.Office.Core.MsoBarPosition.msoBarFloating)
{
    this.CommandBars["Task Pane"].Top = 0;
    this.CommandBars["Task Pane"].Left = 0;
}