기본 디자이너 클래스
업데이트: 2007년 11월
모든 디자이너에서는 기본 디자이너 인터페이스 메서드를 정의하는 IDesigner 인터페이스를 구현합니다. 또한 .NET Framework에서는 특정 형식의 구성 요소나 컨트롤을 지원하는 디자이너에 유용할 수 있는 메서드를 제공하는 기본 디자이너 클래스 집합을 제공합니다.
IDesigner 인터페이스
디자이너 클래스에서는 다음의 코드 예제와 같이 IDesigner 인터페이스를 구현해야 합니다.
Public Interface IDesigner
Sub Dispose()
Sub Initialize(component As IComponent)
' Other methods.
...
ReadOnly Property Component() As IComponent
' Other properties.
...
End Interface
public interface IDesigner {
void Dispose();
void Initialize(IComponent component);
// Other methods.
...
IComponent Component {
get;
}
// Other properties.
...
}
IDesigner의 Initialize 메서드는 디자이너에 대한 구성 요소가 설치되어 초기화되고 디자이너가 만들어진 이후에 호출됩니다. Initialize 메서드를 재정의하여 구성 요소나 디자이너를 초기화할 때 발생하는 작업을 실행할 수 있습니다. 구성 요소의 생성자 초기화는 바꿀 수 없지만 확장하거나 구성 요소가 초기화하는 속성을 다시 설정할 수는 있습니다. IDesigner의 Component 속성은 이 초기화 메서드를 통해 설정됩니다. 이 메서드를 재정의하는 경우에는 Initialize 메서드로부터 항상 base.Initialize(component)를 호출해야 합니다. Component 속성에서 IDesigner의 구성 요소에 액세스할 수 있습니다.
Component 속성은 디자이너가 연결되는 구성 요소에 대한 액세스를 제공합니다. 이 속성은 디자이너 개체를 처음 만들고 Initialize 메서드가 호출될 때 설정됩니다. 구성 요소에는 구성 요소와 연결된 사이트가 있으며, 해당 디자이너가 디자이너 호스트에서 서비스를 얻기 위해 이 사이트를 사용할 수 있습니다.
DoDefaultAction 메서드는 구성 요소나 컨트롤을 두 번 클릭할 때 호출됩니다.
구성 요소에 대한 바로 가기 메뉴를 확장하는 데 필요한 개체가 포함되어 있는 DesignerVerbCollection을 반환하도록 Verbs 속성을 재정의할 수 있습니다.
해당 디자이너 개체를 소멸해야 하는 경우 Dispose 메서드가 호출됩니다. 이 메서드는 구성 요소가 디자인 컨테이너에서 제거될 때마다 호출됩니다.
구성 요소에 대한 기본 디자이너 클래스
ComponentDesigner 클래스에서는 구성 요소의 일부 디자이너에 유용할 수 있는 추가 메서드를 제공하기 위한 IDesigner 및 IDesignerFilter 인터페이스를 구현합니다.
Windows Forms 컨트롤에 대한 기본 디자이너 클래스
Windows Forms 컨트롤에 대한 기본 디자이너 클래스는 ControlDesigner입니다. 이 클래스는 ComponentDesigner에서 파생되며 Windows Forms 컨트롤의 모양 및 동작을 사용자 정의하는 데 유용한 추가 메서드를 제공합니다. Windows Forms 디자이너의 샘플 구현은 방법: 컨트롤에 대한 디자이너 구현을 참조하십시오.
DocumentDesigner 클래스에서는 중첩된 컨트롤을 지원하고 스크롤 메시지를 수신하는 Control의 디자인 모드 동작을 확장하고 루트 수준 디자인 모드 뷰를 제공하기 위한 기본 디자이너를 제공합니다. 자세한 내용은 방법: 디자인 타임 기능을 활용하는 Windows Forms 컨트롤 만들기를 참조하십시오.
ASP.NET 서버 컨트롤에 대한 기본 디자이너 클래스
ASP.NET 서버 컨트롤에 대한 기본 디자이너 클래스는 ControlDesigner입니다. 이 클래스는 사용자 지정 디자인 타임 HTML 렌더링에 대한 기본 기능을 제공합니다. 템플릿 편집과 같은 작업에 대한 다른 기본 클래스는 ASP.NET 웹 페이지에 대한 디자인 타임 지원에 설명되어 있습니다.
디자인 타임 통합에 대한 기본 클래스
TypeConverter 클래스에서는 형식과 텍스트 표현 간 변환에 대한 기본 클래스를 제공합니다. 형식 변환기에 대한 자세한 내용은 방법: 형식 변환기 구현 또는 일반화된 형식 변환을 참조하십시오.
UITypeEditor 클래스에서 제공하는 기본 클래스를 사용하여 파생 클래스를 만들고, 기본 클래스를 확장하여 디자인 타임 환경에 맞는 사용자 지정 형식 편집기를 구현할 수 있습니다. UITypeEditor 구현에 대한 자세한 내용은 사용자 인터페이스 형식 편집기 개요를 참조하십시오.
디자이너 모양과 동작에 대한 기본 클래스
Behavior 클래스는 선택, 끌기 및 크기 조정 동작을 포함하는 모든 형식의 사용자 인터페이스 동작을 개발하기 위해 확장될 수 있습니다. 그리기와 적중 테스트는 Glyph 클래스에서 수행합니다.
자세한 내용은 동작 서비스 개요를 참조하십시오.
디자이너 로더에 대한 기본 클래스
BasicDesignerLoader 클래스에서는 IDesignerLoaderService 인터페이스의 구현을 제공합니다. BasicDesignerLoader는 지속성 형식과 아무 관련이 없는 다지이너 로더의 완전한 구현입니다.
CodeDomDesignerLoader는 CodeDOM(코드 문서 개체 모델)을 기반으로 전체 디자이너 로더를 제공하는 추상 로더입니다.
디자이너 Serialization에 대한 기본 클래스
CodeDomSerializerBase 클래서에서는 CodeDomSerializer 클래스에 대한 기본 클래스를 제공합니다. CodeDomSerializerBase 클래스는 CodeDomSerializer 및 TypeCodeDomSerializer 클래스 간의 공유 기반으로 사용됩니다.
DesignerSerializationManager 클래스에서는 IDesignerSerializationManager 인터페이스의 구현을 제공합니다.
자세한 내용은 디자이너 serialization 개요를 참조하십시오.
스마트 태그에 대한 기본 클래스
DesignerActionList 클래스에서는 스마트 태그 패널을 만드는 데 사용되는 항목의 목록을 정의하는 형식에 대한 기본 클래스를 제공합니다. 자세한 내용은 방법: Windows Forms 구성 요소에 스마트 태그 연결을 참조하십시오.
사용자 지정 레이아웃에 대한 기본 클래스
LayoutEngine 클래스에서는 레이아웃 엔진 구현에 대한 기본 클래스를 제공합니다. TableLayoutPanel 및 FlowLayoutPanel 컨트롤에서는 LayoutEngine 클래스를 사용하여 레이아웃 동작을 제공합니다. 자세한 내용은 방법: 사용자 지정 레이아웃 엔진 구현을 참조하십시오.
표준 디자이너
Windows SDK(소프트웨어 개발 키트)에서는 특정 형식의 구성 요소를 지원하는 디자이너 집합를 제공합니다. 이런 디자이너의 이름은 디자이너에서 디자인하는 구성 요소의 이름 뒤에 Designer가 접미사로 붙어서 지정됩니다. 예를 들어, System.Windows.Forms.Control 클래스의 디자이너는 System.Windows.Forms.Design.ControlDesigner입니다.
공통적인 디자이너 기능
디자이너에서 디자인 타임 서비스에 액세스
대부분의 디자인 타임 서비스 형식은 서비스 형식을 요청에 전달하여 GetService 메서드를 통해 요청할 수 있습니다. Component 및 ComponentDesigner에 GetService 메서드가 있습니다. IServiceProvider에는 GetService 메서드도 있습니다. 이 메서드는 디자인 모드에서 설치되는 IComponent의 Site 속성이 반환하는 ISite에 의해 구현됩니다.
다음 코드에서는 GetService 메서드를 사용하여 IDesignerHost 서비스 인터페이스 및 IMenuCommandService를 얻는 방법을 보여 줍니다.
자세한 내용은 방법: 디자인 타임 서비스 액세스를 참조하십시오.
또한 디자인 모드 서비스 공급자 인터페이스에서 서비스를 얻는 방법도 보여 줍니다.
' Obtain an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Obtain an IMenuCommandService service.
Dim mcs As IMenuCommandService = CType(Me.Component.Site.GetService(GetType(IMenuCommandService)), IMenuCommandService)
// Obtain an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Obtain an IMenuCommandService service.
IMenuCommandService mcs =
(IMenuCommandService)this.Component.Site.GetService(typeof(IMenuCommandService));
디자이너에서 프로젝트 구성 요소에 액세스
디자이너를 사용하면 IDesignerHost 서비스 인터페이스의 Container 속성에 대한 Components 컬렉션에 액세스하여 디자인 모드 문서 내의 구성 요소에 액세스할 수 있습니다. 다음 예제에서는 현재 디자인 모드 프로젝트에 있는 구성 요소에 액세스하는 방법을 보여 줍니다.
' Obtains an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Gets the components container for the current design-time project.
Dim container As IContainer = host.Container
' The host.Container IContainer contains each IComponent in the project.
// Obtains an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Gets the components container for the current design-time project.
IContainer container = host.Container;
// The host.Container IContainer contains each IComponent in the project.
구성 요소 컬렉션에 대한 액세스를 얻고 나면 TypeDescriptor 메서드 및PropertyDescriptor 개체를 사용하여 형식을 식별하고 구성 요소의 속성 값을 설정할 수 있습니다. IDesignerHost 인터페이스의 CreateComponent 메서드를 사용하여 구성 요소를 만들 수도 있습니다.
디자이너 확장
연결된 디자이너가 있는 구성 요소에서 파생하는 경우 기본 클래스의 디자이너는 기본적으로 파생된 구성 요소와 연결됩니다. 구성 요소와 연결된 디자이너 형식을 지정하는 DesignerAttribute 특성을 적용하여, 다른 디자이너를 사용자의 구성 요소와 연결할 수 있습니다. 대개 파생 구성 요소에는 기본 디자이너를 확장한 디자이너가 있습니다.
자세한 내용은 방법: 컨트롤에 대한 디자이너 구현을 참조하십시오.
디자이너를 확장하려면
기본 디자이너 클래스에서 파생되는 클래스를 정의합니다.
DesignerAttribute를 적용하여 새 디자이너 클래스를 사용자의 구성 요소와 연결합니다.
다음 코드 예제에서는 System.Web.UI.Design.WebControls.LabelDesigner를 확장하여 System.Web.UI.WebControls.Label이 확장된 사용자 지정 레이블과 연결하는 디자이너를 정의합니다.
Namespace MyControls.Design
Public Class MyLabelDesigner
Inherits System.Web.UI.Design.WebControls.LabelDesigner
End Class
End Namespace
Namespace MyControls
<Designer(GetType(MyControls.Design.MyLabelDesigner))> _
Public Class MyLabel
Inherits System.Web.UI.WebControls.Label
End Class
End Namespace
namespace MyControls.Design {
public class MyLabelDesigner : System.Web.UI.Design.WebControls.LabelDesigner {}
}
namespace MyControls {
[Designer(typeof(MyControls.Design.MyLabelDesigner))]
public class MyLabel : System.Web.UI.WebControls.Label {}
}
참고: |
---|
봉인된 클래스에 대한 디자이너를 정의하고 있는 경우, 또는 디자이너를 사용하거나 디자이너에서 상속되는 다른 클래스를 사용하지 않으려는 경우, 어셈블리 내부에 디자이너 클래스를 만들 수 있습니다. 디자이너 호스트에서는 디자이너 인스턴스를 만들 수는 있지만, 공용 개체 모델에 적용하지는 못합니다. |
참고 항목
작업
방법: Windows Forms에서 디자인 타임 지원 액세스