다음을 통해 공유


연습: 콘텐츠 컨트롤을 사용하여 서식 파일 만들기

이 연습에서는 콘텐츠 컨트롤을 사용하여 Microsoft Office Word 서식 파일에 다시 사용할 수 있는 구조화된 내용을 만드는 문서 수준 사용자 지정을 만드는 방법을 보여 줍니다.

적용 대상: 이 항목의 정보는 Word 2013 및 Word 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

Word에서는 문서 블록이라는 다시 사용할 수 있는 문서 부분의 컬렉션을 만들 수 있습니다.이 연습에서는 두 개의 표를 문서 블록으로 만드는 방법을 보여 줍니다.각 표에는 일반 텍스트 또는 날짜와 같이 서로 다른 형식의 내용을 저장할 수 있는 몇 개의 콘텐츠 컨트롤이 들어 있습니다.하나의 표에는 직원에 대한 정보가 들어 있고 다른 표에는 고객 의견이 들어 있습니다.

서식 파일에서 문서를 만든 후 서식 파일에 사용 가능한 문서 블록을 표시하는 여러 개의 BuildingBlockGalleryContentControl 개체를 사용하여 문서에 둘 중 하나의 표를 추가할 수 있습니다.

이 연습에서는 다음 작업을 수행합니다.

  • 디자인 타임에 Word 서식 파일의 콘텐츠 컨트롤이 포함된 표 만들기

  • 프로그래밍 방식으로 콤보 상자 콘텐츠 컨트롤 및 드롭다운 목록 콘텐츠 컨트롤 채우기

  • 특정 표를 사용자가 편집할 수 없도록 방지

  • 서식 파일의 문서 블록 컬렉션에 표 추가

  • 서식 파일에 사용 가능한 문서 블록을 표시하는 콘텐츠 컨트롤 만들기

[!참고]

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

-

Microsoft Office 개발자 도구를 포함하는 Visual Studio 2012 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.110\).md)을 참조하십시오.
  • Word 2013 또는 Word 2010

새 Word 서식 파일 프로젝트 만들기

사용자가 고유한 복사본을 쉽게 만들 수 있도록 Word 서식 파일을 만듭니다.

Word 서식 파일 프로젝트를 새로 만들려면

  • MyBuildingBlockTemplate이라는 Word 서식 파일 프로젝트를 만듭니다.마법사에서 솔루션에 새 문서를 만듭니다.자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기을 참조하십시오.

    Visual Studio의 디자이너에 새 Word 서식 파일이 열리고 솔루션 탐색기MyBuildingBlockTemplate 프로젝트가 추가됩니다.

직원 표 만들기

직원 정보를 입력할 수 있는 네 가지 유형의 콘텐츠 컨트롤이 포함된 표를 만듭니다.

직원 표를 만들려면

  1. Visual Studio 디자이너에 호스팅된 Word 서식 파일의 리본 메뉴에서 삽입 탭을 클릭합니다.

  2. 그룹에서 를 클릭하고 2열과 4행으로 구성된 표를 삽입합니다.

  3. 첫 번째 열에 다음 열과 같이 텍스트를 입력합니다.

    Employee Name

    Hire Date

    제목

    그림

  4. 두 번째 열의 첫 번째 셀(Employee Name 옆)을 클릭합니다.

  5. 리본 메뉴에서 개발 도구 탭을 클릭합니다.

    [!참고]

    개발 도구 탭이 표시되지 않으면 먼저 이 탭을 표시해야 합니다.자세한 내용은 방법: 리본 메뉴에 개발 도구 탭 표시을 참조하십시오.

  6. 컨트롤 그룹에서 텍스트 단추 PlainTextContentControl를 클릭하여 첫 번째 셀에 PlainTextContentControl을 추가합니다.

  7. 두 번째 열의 두 번째 셀(Hire Date 옆)을 클릭합니다.

  8. 컨트롤 그룹에서 날짜 선택 단추 DatePickerContentControl를 클릭하여 두 번째 셀에 DatePickerContentControl을 추가합니다.

  9. 두 번째 열의 세 번째 셀(Title 옆)을 클릭합니다.

  10. 컨트롤 그룹에서 콤보 상자 단추 ComboBoxContentControl를 클릭하여 세 번째 셀에 ComboBoxContentControl을 추가합니다.

  11. 두 번째 열의 마지막 셀(Picture 옆)을 클릭합니다.

  12. 컨트롤 그룹에서 그림 콘텐츠 컨트롤 단추 PictureContentControl를 클릭하여 마지막 셀에 PictureContentControl을 추가합니다.

고객 의견 표 만들기

고객 의견 정보를 입력할 수 있는 세 가지 유형의 콘텐츠 컨트롤이 포함된 표를 만듭니다.

고객 의견 표를 만들려면

  1. Word 서식 파일에서 이전에 추가한 직원 표의 다음 줄을 클릭하고 Enter 키를 눌러 새 단락을 추가합니다.

  2. 리본 메뉴에서 삽입 탭을 클릭합니다.

  3. 그룹에서 를 클릭하고 2열과 3행으로 구성된 표를 삽입합니다.

  4. 첫 번째 열에 다음 열과 같이 텍스트를 입력합니다.

    Customer name

    Satisfaction Rating

    설명

  5. 두 번째 열의 첫 번째 셀(Customer Name 옆)을 클릭합니다.

  6. 리본 메뉴에서 개발 도구 탭을 클릭합니다.

  7. 컨트롤 그룹에서 텍스트 단추 PlainTextContentControl를 클릭하여 첫 번째 셀에 PlainTextContentControl을 추가합니다.

  8. 두 번째 열의 두 번째 셀(Satisfaction Rating 옆)을 클릭합니다.

  9. 컨트롤 그룹에서 드롭다운 목록 단추 DropDownListContentControl를 클릭하여 두 번째 셀에 DropDownListContentControl을 추가합니다.

  10. 두 번째 열의 마지막 셀(Comments 옆)을 클릭합니다.

  11. 컨트롤 그룹에서 서식 있는 텍스트 단추 RichTextContentControl를 클릭하여 마지막 셀에 RichTextContentControl을 추가합니다.

프로그래밍 방식으로 콤보 상자 및 드롭다운 목록 채우기

Visual Studio의 속성 창을 사용하여 디자인 타임에 콘텐츠 컨트롤을 초기화할 수 있습니다.런타임에 콘텐츠 컨트롤을 초기화하여 컨트롤의 초기 상태를 동적으로 설정할 수도 있습니다.이 연습에서는 런타임에 ComboBoxContentControlDropDownListContentControl의 항목을 채워 해당 개체의 작동 방식을 볼 수 있도록 합니다.

프로그래밍 방식으로 콘텐츠 컨트롤의 UI를 수정하려면

  1. 솔루션 탐색기에서 ThisDocument.cs 또는 ThisDocument.vb를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

  2. ThisDocument 클래스에 다음 코드를 추가합니다.이 코드에서는 이 연습의 뒷부분에서 사용할 몇 개의 개체를 선언합니다.

    Private GroupControl1 As Microsoft.Office.Tools.Word.GroupContentControl
    Private BuildingBlockControl1 As Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl
    Private BuildingBlockControl2 As Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl
    
    private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl1;
    private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentControl buildingBlockControl2;
    
  3. 다음 코드를 ThisDocument 클래스의 ThisDocument_Startup 메서드에 추가합니다.이 코드에서는 표의 ComboBoxContentControlDropDownListContentControl에 항목을 추가하고, 사용자가 이러한 각 컨트롤을 편집하기 전에 컨트롤에 표시되는 자리 표시자 텍스트를 설정합니다.

    ComboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own"
    ComboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0)
    ComboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1)
    ComboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2)
    
    DropDownListContentControl1.PlaceholderText = _
        "Choose a rating (1 lowest, 3 highest)"
    DropDownListContentControl1.DropDownListEntries.Add("1", "1", 0)
    DropDownListContentControl1.DropDownListEntries.Add("2", "2", 1)
    DropDownListContentControl1.DropDownListEntries.Add("3", "3", 2)
    
    comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own";
    comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0);
    comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1);
    comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2);
    
    dropDownListContentControl1.PlaceholderText =
        "Choose a rating (1 lowest, 3 highest)";
    dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0);
    dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1);
    dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
    

직원 표를 사용자가 편집할 수 없도록 방지

앞에서 선언한 GroupContentControl 개체를 사용하여 직원 표를 보호합니다.표를 보호한 후에도 사용자가 표의 콘텐츠 컨트롤을 편집할 수 있습니다.그러나 첫 번째 열의 텍스트를 편집하거나, 행 및 열을 추가 또는 삭제하는 등 표를 다르게 수정할 수는 없습니다.GroupContentControl을 사용하여 문서의 일부분을 보호하는 방법에 대한 자세한 내용은 콘텐츠 컨트롤을 참조하십시오.

직원 표를 사용자가 편집하지 못하도록 방지하려면

  • 이전 단계에서 추가한 코드 뒤에서 ThisDocument 클래스의 ThisDocument_Startup 메서드에 다음 코드를 추가합니다.이 코드는 앞에서 선언한 GroupContentControl 개체 내에 표를 배치하여 사용자가 직원 표를 편집하지 못하도록 합니다.

    Me.Tables(1).Select()
    GroupControl1 = Me.Controls.AddGroupContentControl("groupControl1")
    
    this.Tables[1].Range.Select();
    groupControl1 = this.Controls.AddGroupContentControl("groupControl1");
    

문서 블록 컬렉션에 표 추가

사용자가 만든 표를 문서에 삽입할 수 있도록 서식 파일에서 문서 블록의 컬렉션에 표를 추가합니다.문서 블록에 대한 자세한 내용은 콘텐츠 컨트롤을 참조하십시오.

서식 파일에서 문서 블록에 표를 추가하려면

  1. 이전 단계에서 추가한 코드 뒤에서 ThisDocument 클래스의 ThisDocument_Startup 메서드에 다음 코드를 추가합니다.이 코드는 서식 파일에서 다시 사용할 수 있는 모든 문서 블록이 들어 있는 Microsoft.Office.Interop.Word.BuildingBlockEntries 컬렉션에 표가 들어 있는 새 문서 블록을 추가합니다.새 문서 블록은 Employee and Customer Information이라는 새 범주에 정의되며 문서 블록 형식으로 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1이 할당됩니다.

    Dim template1 As Word.Template = TryCast(Me.AttachedTemplate, Word.Template)
    If template1 IsNot Nothing Then
    
        template1.BuildingBlockEntries.Add("Employee Table", _
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", _
            Me.Tables(1).Range, InsertOptions:=Word.WdDocPartInsertOptions.wdInsertContent)
        template1.BuildingBlockEntries.Add("Customer Table", _
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", _
            Me.Tables(2).Range, InsertOptions:=Word.WdDocPartInsertOptions.wdInsertContent)
    End If
    
    Word.Template template1 = this.AttachedTemplate as Word.Template;
    
    if (template1 != null)
    {
        object description = null;
        template1.BuildingBlockEntries.Add("Employee Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
        template1.BuildingBlockEntries.Add("Customer Table",
            Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information",
            this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);
    }
    
  2. 이전 단계에서 추가한 코드 뒤에서 ThisDocument 클래스의 ThisDocument_Startup 메서드에 다음 코드를 추가합니다.이 코드는 서식 파일에서 표를 삭제합니다.서식 파일의 다시 사용할 수 있는 문서 블록 갤러리에 표를 추가했으므로 이 표는 더 이상 필요하지 않습니다.코드에서는 먼저 보호된 직원 표를 삭제할 수 있도록 문서를 디자인 모드로 설정합니다.

    If Me.FormsDesign = False Then
        Me.ToggleFormsDesign()
    End If
    Me.Tables(2).Delete()
    Me.Tables(1).Delete()
    Me.ToggleFormsDesign()
    
    if (!this.FormsDesign)
    {
        this.ToggleFormsDesign();
    }
    this.Tables[2].Delete();
    this.Tables[1].Delete();
    this.ToggleFormsDesign();
    

문서 블록을 표시하는 콘텐츠 컨트롤 만들기

앞에서 만든 문서 블록(표)에 액세스할 수 있게 해 주는 콘텐츠 컨트롤을 만듭니다.사용자는 이 컨트롤을 클릭하여 문서에 표를 추가할 수 있습니다.

문서 블록을 표시하는 콘텐츠 컨트롤을 만들려면

  • 이전 단계에서 추가한 코드 뒤에서 ThisDocument 클래스의 ThisDocument_Startup 메서드에 다음 코드를 추가합니다.이 코드는 앞에서 선언한 BuildingBlockGalleryContentControl 개체를 초기화합니다.BuildingBlockGalleryContentControl은 Employee and Customer Information 범주에 정의되고 문서 블록 형식이 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1인 모든 문서 블록을 표시합니다.

    BuildingBlockControl1 = Me.Controls.AddBuildingBlockGalleryContentControl( _
        Me.Paragraphs(1).Range, "buildingBlockControl1")
    BuildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information"
    BuildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1
    BuildingBlockControl1.PlaceholderText = "Choose your first building block"
    
    BuildingBlockControl2 = Me.Controls.AddBuildingBlockGalleryContentControl( _
        Me.Paragraphs(2).Range, "buildingBlockControl2")
    BuildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information"
    BuildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1
    BuildingBlockControl2.PlaceholderText = "Choose your second building block"
    
    buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[1].Range, "buildingBlockControl1");
    buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl1.PlaceholderText = "Choose your first building block";
    
    buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl(
        this.Paragraphs[2].Range, "buildingBlockControl2");
    buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information";
    buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;
    buildingBlockControl2.PlaceholderText = "Choose your second building block";
    

프로젝트 테스트

사용자는 문서의 문서 블록 갤러리 컨트롤을 클릭하여 직원 표나 고객 의견 표를 삽입할 수 있으며,두 표 모두의 콘텐츠 컨트롤에서 응답을 입력하거나 선택할 수 있습니다.사용자가 고객 의견 표의 다른 부분을 수정할 수 있지만 직원 표의 다른 부분은 수정할 수 없어야 합니다.

직원 표를 테스트하려면

  1. F5 키를 눌러 프로젝트를 실행합니다.

  2. Choose your first building block을 클릭하여 첫 번째 문서 블록 갤러리 콘텐츠 컨트롤을 표시합니다.

  3. 컨트롤의 사용자 지정 갤러리 1 머리글 옆에 있는 드롭다운 화살표를 클릭하고 Employee Table을 선택합니다.

  4. Employee Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.

    이 셀에 텍스트만 추가할 수 있는지 확인합니다.PlainTextContentControl을 사용하면 사용자는 텍스트만 추가할 수 있고 아트 또는 표와 같은 다른 형식의 내용은 추가할 수 없습니다.

  5. Hire Date 셀의 오른쪽에 있는 셀을 클릭하고 날짜 선택기에서 날짜를 선택합니다.

  6. Title 셀의 오른쪽에 있는 셀을 클릭하고 콤보 상자에서 직함 중 하나를 선택합니다.

    선택적으로 목록에 없는 직함 이름을 입력합니다.ComboBoxContentControl을 사용할 경우 사용자는 항목 목록에서 선택할 수도 있고 직접 항목을 입력할 수도 있으므로 이 작업이 가능합니다.

  7. Picture 셀의 오른쪽에 있는 셀의 아이콘을 클릭하고 표시할 이미지를 찾습니다.

  8. 표에서 행 또는 열을 추가하거나 삭제해 봅니다.표를 수정할 수 없는지 확인합니다.GroupContentControl은 수정 작업을 수행하지 못하도록 합니다.

고객 의견 표를 테스트하려면

  1. Choose your second building block을 클릭하여 두 번째 문서 블록 갤러리 콘텐츠 컨트롤을 표시합니다.

  2. 컨트롤의 사용자 지정 갤러리 1 머리글 옆의 드롭다운 화살표를 클릭하고 Customer Table을 선택합니다.

  3. Customer Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.

  4. Satisfaction Rating 셀의 오른쪽에 있는 셀을 클릭하고 사용할 수 있는 옵션 중 하나를 선택합니다.

    사용자가 직접 항목을 입력할 수 없는지 확인합니다.DropDownListContentControl을 사용하면 사용자가 항목 목록에서만 선택할 수 있습니다.

  5. Comments 셀의 오른쪽에 있는 셀을 클릭하고 의견을 입력합니다.

    선택적으로 아트나 포함된 표와 같은 텍스트 이외의 내용을 추가합니다.RichTextContentControl을 사용하면 사용자가 텍스트 이외의 내용을 추가할 수 있으므로 이 작업이 가능합니다.

  6. 표에서 행 또는 열을 추가하거나 삭제할 수 있는지 확인합니다.표를 GroupContentControl에 배치하여 보호하지 않았으므로 이 작업이 가능합니다.

  7. 서식 파일을 닫습니다.

다음 단계

이 항목에서는 콘텐츠 컨트롤을 사용하는 방법에 대해 더 자세히 설명합니다.

참고 항목

작업

방법: Word 문서에 콘텐츠 컨트롤 추가

방법: 콘텐츠 컨트롤을 사용하여 문서 부분 보호

개념

확장된 개체를 사용하여 Word 자동화

콘텐츠 컨트롤

호스트 항목 및 호스트 컨트롤 개요

호스트 항목 및 호스트 컨트롤의 프로그래밍에 대한 제한 사항

런타임에 Office 문서에 컨트롤 추가