다음을 통해 공유


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

업데이트: 2008년 7월

적용 대상

이 항목의 정보는 지정된 Visual Studio Tools for Office 프로젝트 및 Microsoft Office 버전에만 적용됩니다.

문서 수준 프로젝트

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

응용 프로그램 수준 프로젝트

  • Excel 2007

  • Word 2007

자세한 내용은 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

런타임에 Microsoft Office Word 문서 및 Microsoft Office Excel 통합 문서에서 컨트롤을 추가하거나 제거할 수 있습니다. 런타임에 문서에 추가하는 컨트롤을 동적 컨트롤이라고 합니다. Visual Studio 2008 SP1(서비스 팩 1)부터는 응용 프로그램 수준 추가 기능을 사용하여 문서와 통합 문서에 동적 컨트롤을 추가할 수 있습니다.

이 항목에서는 다음 내용에 대해 설명합니다.

  • 컨트롤 컬렉션을 사용하여 런타임에 컨트롤 관리

  • 문서에 호스트 컨트롤 추가

  • 문서에 Windows Forms 컨트롤 추가

컨트롤 컬렉션을 사용하여 런타임에 컨트롤 관리

런타임에 컨트롤을 추가하거나 가져오거나 제거하려면 Microsoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection 클래스의 도우미 메서드를 사용합니다.

컨트롤 컬렉션에 액세스하는 방법은 개발하는 프로젝트의 형식에 따라 달라집니다.

컨트롤 추가

Microsoft.Office.Tools.Excel.ControlCollectionMicrosoft.Office.Tools.Word.ControlCollection 클래스에는 문서 및 워크시트에 호스트 컨트롤과 일반적인 Windows Forms 컨트롤을 추가하는 데 사용할 수 있는 도우미 메서드가 포함되어 있습니다. 각 메서드 이름은 Add<control class> 형식입니다. 여기서 control class는 추가할 컨트롤의 클래스 이름입니다. 예를 들어, NamedRange 컨트롤을 문서에 추가하려면 AddNamedRange 메서드를 사용합니다. 도우미 메서드의 전체 목록은 호스트 컨트롤의 도우미 메서드Windows Forms 컨트롤의 도우미 메서드를 참조하십시오.

다음 코드 예제에서는 Excel용 문서 수준 프로젝트의 Sheet1에 NamedRange를 추가합니다.

Dim range1 As Excel.Range = Globals.Sheet1.Range("A1", "D5")
Dim namedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
    Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource")
Excel.Range range1 = Globals.Sheet1.Range["A1", "D5"];
Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
    Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource");

컨트롤 액세스 및 삭제

Microsoft.Office.Tools.Excel.Worksheet 또는 Microsoft.Office.Tools.Word.DocumentControls 속성을 사용하여 디자인 타임에 추가한 컨트롤을 비롯하여 문서의 모든 컨트롤을 반복할 수 있습니다. 디자인 타임에 추가하는 컨트롤은 정적 컨트롤이라고도 합니다.

동적 컨트롤은 컨트롤의 Delete 메서드를 호출하거나 각 Controls 컬렉션의 Remove 메서드를 호출하여 제거할 수 있습니다. 다음 코드 예제에서는 Remove 메서드를 사용하여 Excel용 문서 수준 프로젝트의 Sheet1에서 NamedRange를 제거합니다.

Globals.Sheet1.Controls.Remove("ChartSource")
Globals.Sheet1.Controls.Remove("ChartSource");

런타임에 정적 컨트롤을 제거할 수는 없습니다. Delete 또는 Remove 메서드를 사용하여 정적 컨트롤을 제거하려고 하면 CannotRemoveControlException이 throw됩니다.

참고:

문서의 Shutdown 이벤트 처리기에서 컨트롤을 프로그래밍 방식으로 제거하지 마십시오. Shutdown 이벤트가 발생할 경우 문서의 UI 요소를 더 이상 사용할 수 없습니다. 문서를 닫기 전에 컨트롤을 제거하려면 Document.BeforeClose 또는 Document.BeforeSave(Word의 경우), Workbook.BeforeClose 또는 Workbook.BeforeSave(Excel의 경우) 등의 다른 이벤트에 대한 이벤트 처리기에 코드를 추가합니다.

문서에 호스트 컨트롤 추가

프로그래밍 방식으로 문서에 호스트 컨트롤을 추가할 때는 컨트롤을 고유하게 식별하는 이름과 컨트롤을 추가할 문서 내의 위치를 지정해야 합니다. 구체적인 지침은 다음 항목을 참조하십시오.

호스트 컨트롤에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

문서가 저장된 다음 닫힐 때 동적으로 만들어진 호스트 컨트롤은 모두 이벤트와의 연결이 끊어지고 데이터 바인딩 기능을 잃게 됩니다. 문서가 다시 열릴 때 호스트 컨트롤을 다시 만드는 코드를 솔루션에 추가할 수 있습니다. 자세한 내용은 Office 문서에서 동적 컨트롤 유지를 참조하십시오.

참고:

XmlMappedRange, XMLNodeXMLNodes 호스트 컨트롤은 문서에 프로그래밍 방식으로 추가할 수 없으므로 이러한 컨트롤의 경우에는 도우미 메서드가 제공되지 않습니다.

문서에 Windows Forms 컨트롤 추가

문서에 Windows Forms 컨트롤을 프로그래밍 방식으로 추가하는 경우에는 컨트롤의 위치와 컨트롤을 고유하게 식별하는 이름을 지정해야 합니다. Visual Studio Tools for Office에서는 각 컨트롤에 대한 도우미 메서드를 제공합니다. 이러한 메서드는 컨트롤의 위치에 대한 특정 좌표나 범위를 전달할 수 있도록 오버로드됩니다. 구체적인 지침은 방법: Office 문서에 Windows Forms 컨트롤 추가를 참조하십시오.

문서가 저장된 다음 닫힐 때 동적으로 만들어진 Windows Forms 컨트롤은 모두 문서에서 제거됩니다. 문서가 다시 열릴 때 컨트롤을 다시 만드는 코드를 솔루션에 추가할 수 있습니다. 응용 프로그램 수준 추가 기능을 사용하여 동적 Windows Forms 컨트롤을 만든 경우 해당 컨트롤에 대한 ActiveX 래퍼는 문서에 남아 있습니다. 자세한 내용은 Office 문서에서 동적 컨트롤 유지를 참조하십시오.

참고:

Windows Forms 컨트롤을 보호되는 문서에 프로그래밍 방식으로 추가할 수 없습니다. 프로그래밍 방식으로 Word 문서나 Excel 워크시트의 보호를 해제하여 컨트롤을 추가하려면 문서를 닫을 때 컨트롤의 ActiveX 래퍼를 제거하는 추가 코드를 작성해야 합니다. 컨트롤의 ActiveX 래퍼는 보호된 문서에서 자동으로 삭제되지 않습니다.

사용자 지정 컨트롤 추가

사용자 정의 컨트롤과 같이 사용 가능한 도우미 메서드에서 지원되지 않는 System.Windows.Forms.Control을 추가하려면 다음과 같은 메서드를 사용합니다.

컨트롤을 추가하려면 System.Windows.Forms.Control, 컨트롤의 위치 및 컨트롤을 고유하게 식별하는 이름을 AddControl 메서드에 전달합니다. Excel의 경우 이 메서드는 OLEObject를 반환합니다. Word의 경우 이 메서드는 OLEControl을 반환합니다. 이러한 개체는 컨트롤과 워크시트 또는 문서 간의 상호 작용 방식을 정의합니다.

다음 코드 예제에서는 AddControl(Control, Range, String) 메서드를 사용하여 워크시트에 사용자 지정 사용자 정의 컨트롤을 동적으로 추가하는 방법을 보여 줍니다. 이 예제에서 사용자 정의 컨트롤의 이름은 UserControl1이고 Range 컨트롤의 이름은 range1입니다. 이 예제에서는 Excel용 문서 수준 프로젝트의 Sheetn 클래스 중 하나에서 예제가 실행된다고 가정합니다.

Dim customControl As New UserControl1()

Dim dynamicControl As Microsoft.Office.Tools.Excel.OLEObject = _
    Me.Controls.AddControl(customControl, range1, "dynamic")
UserControl1 customControl = new UserControl1();

Microsoft.Office.Tools.Excel.OLEObject dynamicControl =
    this.Controls.AddControl(customControl, range1, "dynamic");

사용자 지정 컨트롤의 멤버 사용

AddControl 메서드 중 하나를 사용하여 워크시트나 문서에 컨트롤을 추가한 후에는 다음과 같은 두 가지 컨트롤 개체가 추가됩니다.

많은 속성과 메서드는 이러한 컨트롤 사이에서 공유됩니다. 이러한 메서드와 속성에는 적절한 컨트롤을 통해 액세스하는 것이 중요합니다.

  • 사용자 지정 컨트롤에만 속하는 속성 및 메서드에 액세스하려면 System.Windows.Forms.Control을 사용합니다.

  • 컨트롤이 공유하는 속성 및 메서드에 액세스하려면 OLEObject 또는 OLEControl을 사용합니다.

System.Windows.Forms.Control에서 공유 메서드나 속성에 액세스하면 경고나 알림 없이 작업에 실패합니다. 또는 잘못된 결과가 생성될 수 있습니다. 필요한 메서드나 속성을 사용할 수 없는 경우가 아니라면 항상 OLEObject 또는 OLEControl의 메서드 또는 속성을 사용합니다. 필요한 메서드나 속성을 사용할 수 없는 경우에만 System.Windows.Forms.Control을 참조해야 합니다.

예를 들어, OLEObject 클래스와 System.Windows.Forms.Control 클래스는 모두 Top 속성을 사용합니다. 컨트롤의 맨 위와 문서의 맨 위 사이의 거리를 가져오거나 설정하려면 System.Windows.Forms.ControlTop 속성이 아니라 OLEObjectTop 속성을 사용합니다.

' Property is set in relation to the document.
dynamicControl.Top = 100

' Property is set in relation to the container control.
customControl.Top = 100
// Property is set in relation to the document.
dynamicControl.Top = 100;

// Property is set in relation to the container control.
customControl.Top = 100;

참고 항목

작업

방법: 워크시트에 ListObject 컨트롤 추가

방법: 워크시트에 NamedRange 컨트롤 추가

방법: 워크시트에 Chart 컨트롤 추가

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

방법: Word 문서에 책갈피 컨트롤 추가

방법: Office 문서에 Windows Forms 컨트롤 추가

개념

Office 문서에서 동적 컨트롤 유지

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

Windows Forms 컨트롤의 도우미 메서드

Office 문서의 Windows Forms 컨트롤 개요

참조

ControlCollection.AddControl

ControlCollection.AddControl

ControlCollection.Remove

ControlCollection.Remove

기타 리소스

Office 문서의 컨트롤

Excel 호스트 컨트롤

Word 호스트 컨트롤

변경 기록

날짜

변경 내용

이유

2008년 7월

응용 프로그램 수준 추가 기능을 사용하여 문서에 컨트롤을 추가하는 방법에 대한 정보가 추가되었습니다.

SP1 기능 변경