이 연습에서는 콘텐츠 컨트롤을 사용하여 Microsoft Office Word 서식 파일에서 구조화되고 재사용 가능한 콘텐츠를 만드는 문서 수준 사용자 지정을 만드는 방법을 보여 줍니다.
적용 대상: 이 항목의 정보는 Word의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.
문서 구성 요소 컬렉션을 만들기 위해 Word를 사용하면, '문서 부품'이라고 불리는 재사용할 수 있는 구성 요소를 생성할 수 있습니다. 이 워크스루에서는 두 테이블을 기초 블록으로 만드는 방법을 설명합니다. 각 테이블에는 일반 텍스트 또는 날짜와 같은 다양한 유형의 콘텐츠를 포함할 수 있는 여러 콘텐츠 컨트롤이 포함되어 있습니다. 테이블 중 하나에는 직원에 대한 정보가 포함되고 다른 테이블에는 고객 피드백이 포함됩니다.
서식 파일에서 문서를 만든 후 서식 파일에서 사용 가능한 구성 요소를 표시하는 여러 BuildingBlockGalleryContentControl 개체를 사용하여 문서에 테이블 중 하나를 추가할 수 있습니다.
이 연습에서는 다음 작업을 수행합니다.
디자인 타임에 Word 템플릿의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.
프로그램을 통해 콤보 박스 콘텐츠 컨트롤과 드롭다운 리스트 콘텐츠 컨트롤을 채웁니다.
사용자가 지정된 테이블을 편집하지 못하도록 합니다.
템플릿의 문서 블록 컬렉션에 테이블을 추가합니다.
템플릿에서 사용 가능한 구성 요소를 표시하는 콘텐츠 컨트롤을 만듭니다.
비고
일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.
필수 조건
이 연습을 완료하려면 다음 구성 요소가 필요합니다.
Microsoft Office 개발자 도구가 포함된 Visual Studio 버전입니다. 자세한 내용은 Office 솔루션을 개발하도록 컴퓨터 구성을 참조하세요.
Microsoft Word.
새 Word 서식 파일 프로젝트 만들기
사용자가 자신의 복사본을 쉽게 만들 수 있도록 Word 서식 파일을 만듭니다.
새 Word 서식 파일 프로젝트를 만들려면
MyBuildingBlockTemplate이라는 이름으로 Word 서식 파일 프로젝트를 만듭니다. 마법사에서 솔루션에 새 문서를 만듭니다. 자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하세요.
Visual Studio는 디자이너에서 새 Word 서식 파일을 열고 솔루션 탐색기에MyBuildingBlockTemplate 프로젝트를 추가합니다.
직원 테이블 만들기
사용자가 직원에 대한 정보를 입력할 수 있는 네 가지 유형의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.
직원 테이블을 만들려면
Visual Studio 디자이너에서 호스트되는 Word 서식 파일의 리본 메뉴에서 삽입 탭을 클릭합니다.
테이블 그룹에서 테이블을 클릭하고 두 개의 열과 네 개의 행이 있는 테이블을 삽입합니다.
다음 열과 유사하게 첫 번째 열에 텍스트를 입력합니다.
직원 이름 고용 날짜 Title Picture 두 번째 열의 첫 번째 셀( 직원 이름 옆)을 클릭합니다.
리본에서 [개발자 ] 탭을 클릭합니다.
비고
개발자 탭이 표시되지 않으면 먼저 표시해야 합니다. 자세한 내용은 방법: 리본에 개발자 탭 표시를 참조하세요.
컨트롤 그룹에서 텍스트 단추
을 클릭하여 첫 번째 셀에 추가 PlainTextContentControl 합니다.두 번째 열( 고용 날짜 옆)에서 두 번째 셀을 클릭합니다.
컨트롤 그룹에서 날짜 선택 단추
을 클릭하여 두 번째 셀에 추가 DatePickerContentControl 합니다.제목 옆의 두 번째 열에서 세 번째 셀을 클릭합니다.
컨트롤 그룹에서 콤보 상자 단추
을 클릭하여 세 번째 셀에 추가 ComboBoxContentControl 합니다.그림 옆의 두 번째 열에서 마지막 셀을 클릭합니다.
컨트롤 그룹에서 그림 콘텐츠 컨트롤 단추
을 클릭하여 마지막 셀에 추가 PictureContentControl 합니다.
고객 피드백 테이블 만들기
사용자가 고객 피드백 정보를 입력할 수 있는 세 가지 유형의 콘텐츠 컨트롤이 포함된 테이블을 만듭니다.
고객 피드백 테이블을 만들려면
Word 서식 파일에서 이전에 추가한 직원 테이블 뒤의 줄을 클릭하고 Enter 키를 눌러 새 단락을 추가합니다.
리본에서 삽입 탭을 클릭합니다.
테이블 그룹에서 테이블을 클릭하고 두 개의 열과 세 개의 행이 있는 테이블을 삽입합니다.
다음 열과 유사하게 첫 번째 열에 텍스트를 입력합니다.
고객 이름 만족도 등급 코멘트 고객 이름 옆에 있는 두 번째 열의 첫 번째 셀을 클릭합니다.
리본에서 [개발자 ] 탭을 클릭합니다.
컨트롤 그룹에서 텍스트 단추
을 클릭하여 첫 번째 셀에 추가 PlainTextContentControl 합니다.두 번째 열의 두 번째 셀( 만족도 등급 옆)을 클릭합니다.
컨트롤 그룹에서 드롭다운 목록 단추
을 클릭하여 DropDownListContentControl를 두 번째 셀에 추가합니다.두 번째 열의 마지막 셀( 메모 옆)을 클릭합니다.
컨트롤 그룹에서 리치 텍스트 버튼
을 클릭하여 마지막 셀에 RichTextContentControl 추가합니다.
프로그래밍 방식으로 콤보 상자 및 드롭다운 목록 채우기
Visual Studio의 속성 창을 사용하여 디자인 타임에 콘텐츠 컨트롤을 초기화할 수 있습니다. 런타임에 초기화할 수도 있으므로 초기 상태를 동적으로 설정할 수 있습니다. 이 연습에서는 ComboBoxContentControl 및 DropDownListContentControl에 항목을 런타임에 코드로 채워서 이러한 개체가 어떻게 작동하는지 확인할 수 있게 합니다.
프로그래밍 방식으로 콘텐츠 컨트롤의 UI를 수정하려면
솔루션 탐색기에서 ThisDocument.cs 또는 ThisDocument.vb 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.
클래스에 다음 코드를 추가합니다
ThisDocument. 이 코드는 이 연습의 뒷부분에서 사용할 여러 개체를 선언합니다.ThisDocument클래스의ThisDocument_Startup메서드에 다음 코드를 추가합니다. 이 코드는 ComboBoxContentControl 및 DropDownListContentControl 테이블에 항목을 추가하고, 사용자가 편집하기 전에 각각의 컨트롤에 표시되는 자리 표시자 텍스트를 설정합니다.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_Startup코드 다음에 다음 코드를 클래스의ThisDocument메서드에 추가합니다. 이 코드는 사용자가 이전에 선언한 개체 안에 GroupContentControl 테이블을 배치하여 직원 테이블을 편집하지 못하도록 합니다.
빌딩 블록 모음에 테이블 추가
사용자가 만든 테이블을 문서에 삽입할 수 있도록 서식 파일의 문서 구성 요소 컬렉션에 테이블을 추가합니다. 문서 구성 요소에 대한 자세한 내용은 콘텐츠 컨트롤을 참조하세요.
템플릿의 구성 요소에 테이블을 추가하려면
이전 단계에서 추가한
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); }이전 단계에서 추가한
ThisDocument_Startup코드 다음에 다음 코드를 클래스의ThisDocument메서드에 추가합니다. 이 코드는 템플릿에서 테이블을 삭제합니다. 템플릿에서 재사용 가능한 구성 요소의 갤러리에 테이블을 추가했으므로 테이블이 더 이상 필요하지 않습니다. 이 코드는 먼저 보호된 직원 테이블을 삭제할 수 있도록 문서를 디자인 모드로 전환합니다.
구성 요소를 표시하는 콘텐츠 컨트롤 만들기
이전에 만든 구성 요소(즉, 테이블)에 대한 액세스를 제공하는 콘텐츠 컨트롤을 만듭니다. 사용자는 이 컨트롤을 클릭하여 문서에 테이블을 추가할 수 있습니다.
구성 요소를 표시하는 콘텐츠 컨트롤을 만들려면
이전 단계에서 추가한
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";
프로젝트 테스트
사용자는 문서에서 문서 블록 갤러리 컨트롤을 클릭하여 직원 테이블 또는 고객 피드백 테이블을 삽입할 수 있습니다. 사용자는 두 테이블의 콘텐츠 컨트롤에서 응답을 입력하거나 선택할 수 있습니다. 사용자는 고객 피드백 테이블의 다른 부분을 수정할 수 있지만 직원 테이블의 다른 부분을 수정할 수는 없습니다.
직원 테이블을 테스트하려면
F5 키를 눌러 프로젝트를 실행합니다.
첫 번째 빌딩 블록을 선택을 클릭하여 첫 번째 빌딩 블록 갤러리 콘텐츠 컨트롤을 표시합니다.
컨트롤의 사용자 지정 갤러리 1 머리글 옆에 있는 드롭다운 화살표를 클릭하고 직원 테이블을 선택합니다.
Employee Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.
이 셀에 텍스트만 추가할 수 있는지 확인합니다. 이를 PlainTextContentControl 통해 사용자는 아트 또는 테이블과 같은 다른 유형의 콘텐츠가 아닌 텍스트만 추가할 수 있습니다.
고용 날짜 셀의 오른쪽에 있는 셀을 클릭하고 날짜 선택기에서 날짜를 선택합니다.
제목 셀의 오른쪽에 있는 셀을 클릭하고 콤보 상자에서 직함 중 하나를 선택합니다.
필요에 따라 목록에 없는 직종의 이름을 입력합니다. 사용자가 항목 목록에서 선택하거나 자신의 항목을 입력할 수 있기 때문에 ComboBoxContentControl 가능합니다.
그림 셀 오른쪽에 있는 셀의 아이콘을 클릭하고 이미지를 찾아 표시합니다.
테이블에 행 또는 열을 추가하고 테이블에서 행과 열을 삭제해 봅니다. 테이블을 수정할 수 없는지 확인합니다. GroupContentControl이(가) 수정할 수 없도록 방지합니다.
고객 피드백 테이블을 테스트하려면
두 번째 빌딩 블록 선택을 클릭하여 두 번째 빌딩 블록 갤러리 콘텐츠 컨트롤을 표시합니다.
컨트롤의 사용자 지정 갤러리 1 제목 옆에 있는 드롭다운 화살표를 클릭하고 고객 테이블을 선택합니다.
Customer Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.
만족도 등급 셀의 오른쪽에 있는 셀을 클릭하고 사용 가능한 옵션 중 하나를 선택합니다.
사용자 고유의 항목을 입력할 수 없는지 확인합니다. DropDownListContentControl 사용자가 항목 목록에서만 선택할 수 있습니다.
Comments 셀의 오른쪽에 있는 셀을 클릭하고 메모를 입력합니다.
필요에 따라 아트 또는 포함된 테이블과 같이 텍스트 이외의 일부 콘텐츠를 추가합니다. 사용자가 텍스트 이외의 콘텐츠를 추가할 수 있기 때문에 RichTextContentControl 가능합니다.
테이블에 행 또는 열을 추가할 수 있고 테이블에서 행과 열을 삭제할 수 있는지 확인합니다. GroupContentControl에 넣어 테이블을 보호하지 않았기 때문에 이러한 문제가 발생할 수 있습니다.
템플릿을 닫습니다.
다음 단계
이 항목에서 콘텐츠 컨트롤을 사용하는 방법에 대해 자세히 알아볼 수 있습니다.
- 문서에 포함된 사용자 지정 XML 파트라고도 하는 XML 조각에 콘텐츠 컨트롤을 바인딩합니다. 자세한 내용은 연습: 사용자 지정 XML 파트에 콘텐츠 컨트롤 바인딩을 참조하세요.