다음을 통해 공유


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

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

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

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

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

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

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

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

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

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

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

참고

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

사전 요구 사항

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

-

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

    Title

    Picture

  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

    Comments

  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 문서에 컨트롤 추가

호스트 컨트롤의 도우미 메서드