다음을 통해 공유


가이드: 콘텐츠 컨트롤을 사용하여 템플릿 만들기

이 연습에서는 콘텐츠 컨트롤을 사용하여 Microsoft Office Word 서식 파일에서 구조화되고 재사용 가능한 콘텐츠를 만드는 문서 수준 사용자 지정을 만드는 방법을 보여 줍니다.

적용 대상: 이 항목의 정보는 Word의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.

문서 구성 요소 컬렉션을 만들기 위해 Word를 사용하면, '문서 부품'이라고 불리는 재사용할 수 있는 구성 요소를 생성할 수 있습니다. 이 워크스루에서는 두 테이블을 기초 블록으로 만드는 방법을 설명합니다. 각 테이블에는 일반 텍스트 또는 날짜와 같은 다양한 유형의 콘텐츠를 포함할 수 있는 여러 콘텐츠 컨트롤이 포함되어 있습니다. 테이블 중 하나에는 직원에 대한 정보가 포함되고 다른 테이블에는 고객 피드백이 포함됩니다.

서식 파일에서 문서를 만든 후 서식 파일에서 사용 가능한 구성 요소를 표시하는 여러 BuildingBlockGalleryContentControl 개체를 사용하여 문서에 테이블 중 하나를 추가할 수 있습니다.

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

  • 디자인 타임에 Word 템플릿의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.

  • 프로그램을 통해 콤보 박스 콘텐츠 컨트롤과 드롭다운 리스트 콘텐츠 컨트롤을 채웁니다.

  • 사용자가 지정된 테이블을 편집하지 못하도록 합니다.

  • 템플릿의 문서 블록 컬렉션에 테이블을 추가합니다.

  • 템플릿에서 사용 가능한 구성 요소를 표시하는 콘텐츠 컨트롤을 만듭니다.

    비고

    일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

필수 조건

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

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

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

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

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

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

직원 테이블 만들기

사용자가 직원에 대한 정보를 입력할 수 있는 네 가지 유형의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.

직원 테이블을 만들려면

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

  2. 테이블 그룹에서 테이블을 클릭하고 두 개의 열과 네 개의 행이 있는 테이블을 삽입합니다.

  3. 다음 열과 유사하게 첫 번째 열에 텍스트를 입력합니다.

    직원 이름
    고용 날짜
    Title
    Picture
  4. 두 번째 열의 첫 번째 셀( 직원 이름 옆)을 클릭합니다.

  5. 리본에서 [개발자 ] 탭을 클릭합니다.

    비고

    개발자 탭이 표시되지 않으면 먼저 표시해야 합니다. 자세한 내용은 방법: 리본에 개발자 탭 표시를 참조하세요.

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

  7. 두 번째 열( 고용 날짜 옆)에서 두 번째 셀을 클릭합니다.

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

  9. 제목 옆의 두 번째 열에서 세 번째 셀을 클릭합니다.

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

  11. 그림 옆의 두 번째 열에서 마지막 셀을 클릭합니다.

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

고객 피드백 테이블 만들기

사용자가 고객 피드백 정보를 입력할 수 있는 세 가지 유형의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.

고객 피드백 테이블을 만들려면

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

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

  3. 테이블 그룹에서 테이블을 클릭하고 두 개의 열과 세 개의 행이 있는 테이블을 삽입합니다.

  4. 다음 열과 유사하게 첫 번째 열에 텍스트를 입력합니다.

    고객 이름
    만족도 등급
    코멘트
  5. 고객 이름 옆에 있는 두 번째 열의 첫 번째 셀을 클릭합니다.

  6. 리본에서 [개발자 ] 탭을 클릭합니다.

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

  8. 두 번째 열의 두 번째 셀( 만족도 등급 옆)을 클릭합니다.

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

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

  11. 컨트롤 그룹에서 리치 텍스트 버튼 RichTextContentControl을 클릭하여 마지막 셀에 RichTextContentControl 추가합니다.

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

Visual Studio의 속성 창을 사용하여 디자인 타임에 콘텐츠 컨트롤을 초기화할 수 있습니다. 런타임에 초기화할 수도 있으므로 초기 상태를 동적으로 설정할 수 있습니다. 이 연습에서는 ComboBoxContentControlDropDownListContentControl에 항목을 런타임에 코드로 채워서 이러한 개체가 어떻게 작동하는지 확인할 수 있게 합니다.

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

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

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

    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);
    

사용자가 직원 테이블을 편집하지 못하도록 방지

GroupContentControl 앞에서 선언한 개체를 사용하여 직원 테이블을 보호합니다. 테이블을 보호한 후에도 사용자는 테이블의 콘텐츠 컨트롤을 편집할 수 있습니다. 그러나 첫 번째 열의 텍스트를 편집하거나 행 및 열 추가 또는 삭제와 같은 다른 방법으로 테이블을 수정할 수는 없습니다. 문서의 일부를 보호하는 데 사용하는 GroupContentControl 방법에 대한 자세한 내용은 콘텐츠 컨트롤을 참조하세요.

사용자가 직원 테이블을 편집하지 못하도록 하려면

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

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

빌딩 블록 모음에 테이블 추가

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

템플릿의 구성 요소에 테이블을 추가하려면

  1. 이전 단계에서 추가한 ThisDocument_Startup 코드 다음에 다음 코드를 클래스의 ThisDocument 메서드에 추가합니다. 이 코드는 테이블을 포함하는 새 구성 요소를 템플릿의 재사용 가능한 모든 구성 요소를 포함하는 Microsoft.Office.Interop.Word.BuildingBlockEntries 컬렉션에 추가합니다. 새 구성 요소는 Employee 및 Customer Information 이라는 새 범주에 정의되며 문서 블록 유형 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1이 할당됩니다.

    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_Startup 코드 다음에 다음 코드를 클래스의 ThisDocument 메서드에 추가합니다. 이 코드는 템플릿에서 테이블을 삭제합니다. 템플릿에서 재사용 가능한 구성 요소의 갤러리에 테이블을 추가했으므로 테이블이 더 이상 필요하지 않습니다. 이 코드는 먼저 보호된 직원 테이블을 삭제할 수 있도록 문서를 디자인 모드로 전환합니다.

    if (!this.FormsDesign)
    {
        this.ToggleFormsDesign();
    }
    this.Tables[2].Delete();
    this.Tables[1].Delete();
    this.ToggleFormsDesign();
    

구성 요소를 표시하는 콘텐츠 컨트롤 만들기

이전에 만든 구성 요소(즉, 테이블)에 대한 액세스를 제공하는 콘텐츠 컨트롤을 만듭니다. 사용자는 이 컨트롤을 클릭하여 문서에 테이블을 추가할 수 있습니다.

구성 요소를 표시하는 콘텐츠 컨트롤을 만들려면

  1. 이전 단계에서 추가한 ThisDocument_Startup 코드 다음에 다음 코드를 클래스의 ThisDocument 메서드에 추가합니다. 이 코드는 BuildingBlockGalleryContentControl 이전에 선언한 개체를 초기화합니다. 범주 직원 및 고객 정보에 정의되고 빌딩 블록 유형 Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1인 모든 빌딩 블록을 BuildingBlockGalleryContentControl에 표시합니다.

    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. 첫 번째 빌딩 블록을 선택을 클릭하여 첫 번째 빌딩 블록 갤러리 콘텐츠 컨트롤을 표시합니다.

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

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

    이 셀에 텍스트만 추가할 수 있는지 확인합니다. 이를 PlainTextContentControl 통해 사용자는 아트 또는 테이블과 같은 다른 유형의 콘텐츠가 아닌 텍스트만 추가할 수 있습니다.

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

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

    필요에 따라 목록에 없는 직종의 이름을 입력합니다. 사용자가 항목 목록에서 선택하거나 자신의 항목을 입력할 수 있기 때문에 ComboBoxContentControl 가능합니다.

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

  8. 테이블에 행 또는 열을 추가하고 테이블에서 행과 열을 삭제해 봅니다. 테이블을 수정할 수 없는지 확인합니다. GroupContentControl이(가) 수정할 수 없도록 방지합니다.

고객 피드백 테이블을 테스트하려면

  1. 두 번째 빌딩 블록 선택을 클릭하여 두 번째 빌딩 블록 갤러리 콘텐츠 컨트롤을 표시합니다.

  2. 컨트롤의 사용자 지정 갤러리 1 제목 옆에 있는 드롭다운 화살표를 클릭하고 고객 테이블을 선택합니다.

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

  4. 만족도 등급 셀의 오른쪽에 있는 셀을 클릭하고 사용 가능한 옵션 중 하나를 선택합니다.

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

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

    필요에 따라 아트 또는 포함된 테이블과 같이 텍스트 이외의 일부 콘텐츠를 추가합니다. 사용자가 텍스트 이외의 콘텐츠를 추가할 수 있기 때문에 RichTextContentControl 가능합니다.

  6. 테이블에 행 또는 열을 추가할 수 있고 테이블에서 행과 열을 삭제할 수 있는지 확인합니다. GroupContentControl에 넣어 테이블을 보호하지 않았기 때문에 이러한 문제가 발생할 수 있습니다.

  7. 템플릿을 닫습니다.

다음 단계

이 항목에서 콘텐츠 컨트롤을 사용하는 방법에 대해 자세히 알아볼 수 있습니다.