연습: 콘텐츠 컨트롤을 사용하여 서식 파일 만들기
이 연습에서는 콘텐츠 컨트롤을 사용하여 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 프로젝트가 추가됩니다.
직원 표 만들기
직원 정보를 입력할 수 있는 네 가지 유형의 콘텐츠 컨트롤이 포함된 표를 만듭니다.
직원 표를 만들려면
Visual Studio 디자이너에 호스팅된 Word 서식 파일의 리본 메뉴에서 삽입 탭을 클릭합니다.
표 그룹에서 표를 클릭하고 2열과 4행으로 구성된 표를 삽입합니다.
첫 번째 열에 다음 열과 같이 텍스트를 입력합니다.
Employee Name
Hire Date
Title
Picture
두 번째 열의 첫 번째 셀(Employee Name 옆)을 클릭합니다.
리본 메뉴에서 개발 도구 탭을 클릭합니다.
참고
개발 도구 탭이 표시되지 않으면 먼저 이 탭을 표시해야 합니다. 자세한 내용은 방법: 리본 메뉴에 개발 도구 탭 표시를 참조하십시오.
컨트롤 그룹에서 텍스트 단추 를 클릭하여 첫 번째 셀에 PlainTextContentControl을 추가합니다.
두 번째 열의 두 번째 셀(Hire Date 옆)을 클릭합니다.
컨트롤 그룹에서 날짜 선택 단추 를 클릭하여 두 번째 셀에 DatePickerContentControl을 추가합니다.
두 번째 열의 세 번째 셀(Title 옆)을 클릭합니다.
컨트롤 그룹에서 콤보 상자 단추 를 클릭하여 세 번째 셀에 ComboBoxContentControl을 추가합니다.
두 번째 열의 마지막 셀(Picture 옆)을 클릭합니다.
컨트롤 그룹에서 그림 콘텐츠 컨트롤 단추 를 클릭하여 마지막 셀에 PictureContentControl을 추가합니다.
고객 의견 표 만들기
고객 의견 정보를 입력할 수 있는 세 가지 유형의 콘텐츠 컨트롤이 포함된 표를 만듭니다.
고객 의견 표를 만들려면
Word 서식 파일에서 이전에 추가한 직원 표의 다음 줄을 클릭하고 Enter 키를 눌러 새 단락을 추가합니다.
리본 메뉴에서 삽입 탭을 클릭합니다.
표 그룹에서 표를 클릭하고 2열과 3행으로 구성된 표를 삽입합니다.
첫 번째 열에 다음 열과 같이 텍스트를 입력합니다.
Customer name
Satisfaction Rating
Comments
두 번째 열의 첫 번째 셀(Customer Name 옆)을 클릭합니다.
리본 메뉴에서 개발 도구 탭을 클릭합니다.
컨트롤 그룹에서 텍스트 단추 를 클릭하여 첫 번째 셀에 PlainTextContentControl을 추가합니다.
두 번째 열의 두 번째 셀(Satisfaction Rating 옆)을 클릭합니다.
컨트롤 그룹에서 드롭다운 목록 단추 를 클릭하여 두 번째 셀에 DropDownListContentControl을 추가합니다.
두 번째 열의 마지막 셀(Comments 옆)을 클릭합니다.
컨트롤 그룹에서 서식 있는 텍스트 단추 를 클릭하여 마지막 셀에 RichTextContentControl을 추가합니다.
프로그래밍 방식으로 콤보 상자 및 드롭다운 목록 채우기
Visual Studio의 속성 창을 사용하여 디자인 타임에 콘텐츠 컨트롤을 초기화할 수 있습니다. 런타임에 콘텐츠 컨트롤을 초기화하여 컨트롤의 초기 상태를 동적으로 설정할 수도 있습니다. 이 연습에서는 런타임에 ComboBoxContentControl 및 DropDownListContentControl의 항목을 채워 해당 개체의 작동 방식을 볼 수 있도록 합니다.
프로그래밍 방식으로 콘텐츠 컨트롤의 UI를 수정하려면
솔루션 탐색기에서 ThisDocument.cs 또는 ThisDocument.vb를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.
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;
다음 코드를 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)
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");
문서 블록 컬렉션에 표 추가
사용자가 만든 표를 문서에 삽입할 수 있도록 서식 파일에서 문서 블록의 컬렉션에 표를 추가합니다. 문서 블록에 대한 자세한 내용은 콘텐츠 컨트롤을 참조하십시오.
서식 파일에서 문서 블록에 표를 추가하려면
이전 단계에서 추가한 코드 뒤에서 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); }
이전 단계에서 추가한 코드 뒤에서 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";
프로젝트 테스트
사용자는 문서의 문서 블록 갤러리 컨트롤을 클릭하여 직원 표나 고객 의견 표를 삽입할 수 있으며, 두 표 모두의 콘텐츠 컨트롤에서 응답을 입력하거나 선택할 수 있습니다. 사용자가 고객 의견 표의 다른 부분을 수정할 수 있지만 직원 표의 다른 부분은 수정할 수 없어야 합니다.
직원 표를 테스트하려면
F5 키를 눌러 프로젝트를 실행합니다.
Choose your first building block을 클릭하여 첫 번째 문서 블록 갤러리 콘텐츠 컨트롤을 표시합니다.
컨트롤의 사용자 지정 갤러리 1 머리글 옆에 있는 드롭다운 화살표를 클릭하고 Employee Table을 선택합니다.
Employee Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.
이 셀에 텍스트만 추가할 수 있는지 확인합니다. PlainTextContentControl을 사용하면 사용자는 텍스트만 추가할 수 있고 아트 또는 표와 같은 다른 형식의 내용은 추가할 수 없습니다.
Hire Date 셀의 오른쪽에 있는 셀을 클릭하고 날짜 선택기에서 날짜를 선택합니다.
Title 셀의 오른쪽에 있는 셀을 클릭하고 콤보 상자에서 직함 중 하나를 선택합니다.
선택적으로 목록에 없는 직함 이름을 입력합니다. ComboBoxContentControl을 사용할 경우 사용자는 항목 목록에서 선택할 수도 있고 직접 항목을 입력할 수도 있으므로 이 작업이 가능합니다.
Picture 셀의 오른쪽에 있는 셀의 아이콘을 클릭하고 표시할 이미지를 찾습니다.
표에서 행 또는 열을 추가하거나 삭제해 봅니다. 표를 수정할 수 없는지 확인합니다. GroupContentControl은 수정 작업을 수행하지 못하도록 합니다.
고객 의견 표를 테스트하려면
Choose your second building block을 클릭하여 두 번째 문서 블록 갤러리 콘텐츠 컨트롤을 표시합니다.
컨트롤의 사용자 지정 갤러리 1 머리글 옆의 드롭다운 화살표를 클릭하고 Customer Table을 선택합니다.
Customer Name 셀의 오른쪽에 있는 셀을 클릭하고 이름을 입력합니다.
Satisfaction Rating 셀의 오른쪽에 있는 셀을 클릭하고 사용할 수 있는 옵션 중 하나를 선택합니다.
사용자가 직접 항목을 입력할 수 없는지 확인합니다. DropDownListContentControl을 사용하면 사용자가 항목 목록에서만 선택할 수 있습니다.
Comments 셀의 오른쪽에 있는 셀을 클릭하고 의견을 입력합니다.
선택적으로 아트나 포함된 표와 같은 텍스트 이외의 내용을 추가합니다. RichTextContentControl을 사용하면 사용자가 텍스트 이외의 내용을 추가할 수 있으므로 이 작업이 가능합니다.
표에서 행 또는 열을 추가하거나 삭제할 수 있는지 확인합니다. 표를 GroupContentControl에 배치하여 보호하지 않았으므로 이 작업이 가능합니다.
서식 파일을 닫습니다.
다음 단계
이 항목에서는 콘텐츠 컨트롤을 사용하는 방법에 대해 더 자세히 설명합니다.
- 문서에 포함된 XML 부분(사용자 지정 XML 부분이라고도 함)에 콘텐츠 컨트롤을 바인딩합니다. 자세한 내용은 연습: 콘텐츠 컨트롤을 사용자 지정 XML 부분에 바인딩을 참조하십시오.