다음을 통해 공유


작업창 개요

작업창은 특정 Microsoft Office Word 문서 또는 Microsoft Office Excel 통합 문서에 연결된 사용자 지정 가능한 문서 동작 작업창입니다. 작업창은 Excel의 XML 소스 작업창 또는 Word의 스타일 및 서식 작업창과 같은 다른 기본 제공 작업창과 함께 Office 작업창 내에 호스트됩니다. Windows Forms 컨트롤 또는 WPF 컨트롤을 사용하여 작업 창 사용자 인터페이스를 디자인할 수 있습니다.

적용 대상: 이 항목의 정보는 Excel 및 Word의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.

Word 또는 Excel에 대한 문서 수준 사용자 지정에만 작업 창을 만들 수 있습니다. VSTO 추가 기능에서는 작업 창을 만들 수 없습니다. 자세한 내용은 Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.

참고 항목

작업 창은 사용자 지정 작업창과 다릅니다. 사용자 지정 작업창은 특정 문서가 아니라 애플리케이션과 연결됩니다. VSTO 추가 기능에서 일부 Microsoft Office 애플리케이션에 대한 사용자 지정 작업창을 만들 수 있습니다. 자세한 내용은 사용자 지정 작업창을 참조하세요.

작업창 표시

작업 창은 ActionsPane 클래스로 표현됩니다. 문서 수준 프로젝트를 만드는 경우 프로젝트에서 ThisWorkbook(Excel용) 또는 ThisDocument(Word용) 클래스의 ActionsPane 필드를 통해 코드에서 이 클래스의 인스턴스를 사용할 수 있습니다. 작업 창을 표시하려면 ActionsPane 필드의 Controls 속성에 Windows Forms 컨트롤을 추가합니다. 다음 코드 예제에서는 actions라는 컨트롤을 작업 창에 추가합니다.

this.ActionsPane.Controls.Add(actions);

작업 창은 명시적으로 컨트롤을 추가하는 즉시 런타임에 표시됩니다. 작업 창이 표시되면 사용자 작업에 대한 응답으로 컨트롤을 동적으로 추가하거나 제거할 수 있습니다. 일반적으로 사용자가 처음 문서를 열 때 작업 창이 표시되도록 ThisDocument 또는 ThisWorkbookStartup 이벤트 처리기에 작업 창을 표시하는 코드를 추가합니다. 그러나 문서의 사용자 작업에 대한 응답으로만 작업 창을 표시하는 것이 좋습니다. 예를 들어 문서에서 컨트롤의 Click 이벤트에 코드를 추가할 수 있습니다.

작업창에 여러 컨트롤 추가

작업창에 여러 컨트롤을 추가하는 경우 사용자 정의 컨트롤에 컨트롤을 그룹화한 다음, 사용자 정의 컨트롤을 Controls 속성에 추가해야 합니다. 이 프로세스에는 다음 단계가 포함됩니다.

  1. 프로젝트에 작업창 컨트롤 또는 사용자 정의 컨트롤 항목을 추가하여 작업창의 UI(사용자 인터페이스)를 만듭니다. 두 항목에는 모두 사용자 지정 Windows Forms UserControl 클래스가 포함되어 있습니다. 작업창 컨트롤사용자 정의 컨트롤 항목은 동일하며, 유일한 차이점은 이름뿐입니다.

  2. 디자이너를 사용하여 또는 코드를 작성하여 UserControl에 Windows Forms 컨트롤을 추가합니다.

    참고 항목

    Windows Forms UserControl에 WPF 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로 설정할 수도 있습니다. 다음 코드 예제는 프로젝트의 ThisDocument 또는 ThisWorkbook 클래스에서 실행해야 합니다.

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

문서를 열 때 작업창 지우기

작업창이 표시되는 동안 사용자가 문서를 저장하는 경우 작업창에 컨트롤이 포함되어 있는지 여부에 관계없이 문서를 열 때마다 작업창이 표시됩니다. 표시되는 시기를 제어하려는 경우 ThisDocument 또는 ThisWorkbookStartup 이벤트 처리기에서 ActionsPane 필드의 Clear 메서드를 호출하여 문서를 열 때 작업 창이 표시되지 않도록 합니다.

작업창이 닫히는 시기 결정

작업 창이 닫힐 때 발생하는 이벤트는 없습니다. ActionsPane 클래스에 VisibleChanged 이벤트가 있긴 하지만 이 이벤트는 최종 사용자가 작업 창을 닫을 때 발생하지 않습니다. 대신, 이 이벤트는 Hide 메서드를 호출하거나 Visible 속성을 false로 설정하여 작업창의 컨트롤을 숨길 때 발생합니다.

사용자가 작업창을 닫는 경우 사용자는 애플리케이션의 UI(사용자 인터페이스)에서 다음 절차 중 하나를 수행하여 다시 표시할 수 있습니다.

Word 또는 Excel의 UI를 사용하여 작업 창을 표시하려면
  1. 리본에서 보기 탭을 클릭합니다.

  2. 표시/숨기기 그룹에서 문서 동작 토글 단추를 클릭합니다.

프로그램 작업창 이벤트

작업 창에 여러 개의 사용자 정의 컨트롤을 추가한 다음 사용자 정의 컨트롤을 표시하거나 숨겨 문서의 이벤트에 응답하는 코드를 작성할 수 있습니다. 문서에 XML 스키마 요소를 매핑하는 경우 삽입 지점이 XML 요소 중 하나의 내부에 있을 때마다 작업 창에 특정 사용자 정의 컨트롤을 표시할 수 있습니다. 자세한 내용은 방법: Visual Studio 내부의 Word 문서에 스키마 매핑방법: Visual Studio 내부의 워크시트에 스키마 매핑을 참조하세요.

호스트 컨트롤, 애플리케이션 또는 문서 이벤트를 포함하여 개체의 이벤트에 응답하는 코드를 작성할 수도 있습니다. 자세한 내용은 연습: NamedRange 컨트롤의 이벤트에 대해 프로그래밍을 참조하세요.

작업창의 컨트롤에 데이터 바인딩

작업 창의 컨트롤은 Windows Forms의 컨트롤과 동일한 데이터 바인딩 기능을 가지고 있습니다. 데이터 집합, 형식화된 데이터 집합 및 XML과 같은 데이터 소스에 컨트롤을 바인딩할 수 있습니다. 자세한 내용은 데이터 바인딩 및 Windows Forms를 참조하세요.

작업 창의 컨트롤과 문서의 컨트롤을 동일한 데이터 세트에 바인딩할 수 있습니다. 예를 들어 작업 창의 컨트롤과 워크시트의 컨트롤 간에 마스터/세부 관계를 만들 수 있습니다. 자세한 정보는 연습: Excel 작업창의 컨트롤에 데이터 바인딩을 참조하세요.

작업창 컨트롤의 데이터 유효성 검사

작업 창에 있는 컨트롤의 Validating 이벤트 처리기에 메시지 상자를 표시하는 경우 포커스가 두 번째로 컨트롤에서 메시지 상자로 이동할 때 이벤트가 발생할 수도 있습니다. 이 문제를 방지하려면 ErrorProvider 컨트롤을 사용하여 유효성 검사 오류 메시지를 표시합니다.

사용자 정의 컨트롤 스택 순서

여러 개의 사용자 정의 컨트롤을 사용하는 경우 가로 또는 세로로 도킹하는지에 관계없이 작업 창에서 사용자 정의 컨트롤을 제대로 쌓는 코드를 작성할 수 있습니다. StackOrder 속성의 StackStyle 열거형을 사용하여 작업 창의 사용자 정의 컨트롤 스택 순서를 설정할 수 있습니다. 자세한 내용은 방법: 작업창에서 컨트롤 레이아웃 관리를 참조하세요.

StackOrder 속성은 다음 StackStyle 열거형 값을 사용할 수 있습니다.

스택 스타일 정의
FromBottom 작업 창의 아래쪽에서 쌓습니다.
FromLeft 작업 창의 왼쪽에서 쌓습니다.
FromRight 작업 창의 오른쪽에서 쌓습니다.
FromTop 작업 창의 위쪽에서 쌓습니다.
없음 스택 순서가 정의되지 않습니다. 개발자가 순서를 제어합니다.

다음 코드에서는 StackOrder 속성을 설정하여 작업 창의 위쪽에서 사용자 정의 컨트롤을 쌓습니다.

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

컨트롤 고정

사용자가 런타임에 작업 창의 크기를 조정하면 작업 창과 함께 컨트롤의 크기를 조정할 수 있습니다. Windows Forms 컨트롤의 Anchor 속성을 사용하여 작업 창에 컨트롤을 고정할 수 있습니다. 동일한 방식으로 사용자 정의 컨트롤에 Windows Forms 컨트롤을 고정할 수도 있습니다. 자세한 내용은 방법: Windows Forms에서 컨트롤 고정을 참조하세요.

작업창 크기 조정

ActionsPane이 작업창에 포함되어 있으므로 ActionsPane의 크기를 직접 변경할 수는 없습니다. 그러나 작업창을 나타내는 CommandBarWidth 속성을 설정하여 프로그래밍 방식으로 작업창의 너비를 변경할 수 있습니다. 가로로 도킹되어 있거나 부동 창인 경우 작업창의 높이를 변경할 수 있습니다.

사용자가 요구 사항에 가장 적합한 작업창 크기를 선택할 수 있어야 하므로 프로그래밍 방식으로 작업창의 크기를 조정하지 않는 것이 좋습니다. 그러나 작업창의 너비를 조정해야 하는 경우 다음 코드를 사용하여 이 작업을 수행할 수 있습니다.

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

작업창 위치 변경

ActionsPane은 작업창에 포함되어 있으므로 직접 위치를 변경할 수 없습니다. 그러나 작업창을 나타내는 CommandBarPosition 속성을 설정하여 프로그래밍 방식으로 작업창을 이동할 수 있습니다.

사용자가 화면에서 요구 사항에 가장 적합한 작업창 위치를 선택할 수 있어야 하므로 프로그래밍 방식으로 작업창의 위치를 변경하지 않는 것이 좋습니다. 그러나 작업창을 특정 위치로 이동해야 하는 경우 다음 코드를 사용하여 이 작업을 수행할 수 있습니다.

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

참고 항목

최종 사용자는 언제든지 작업창의 위치를 수동으로 변경할 수 있습니다. 프로그래밍 방식으로 지정한 위치에 작업창이 도킹된 상태로 유지되도록 하는 방법은 없습니다. 그러나 방향 변경을 검사하고 작업 창의 컨트롤이 올바른 방향으로 쌓이는지 확인할 수 있습니다. 자세한 내용은 방법: 작업창에서 컨트롤 레이아웃 관리를 참조하세요.

ActionsPane 개체는 작업창에 포함되어 있으므로 ActionsPaneTopLeft 속성을 설정해도 해당 위치가 변경되지 않습니다.

작업창이 도킹되지 않은 경우 작업창을 나타내는 CommandBarTopLeft 속성을 설정할 수 있습니다. 다음 코드는 도킹되지 않은 작업창을 문서의 왼쪽 위로 이동합니다.

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