Windows Forms용 디자이너 명령 및 DesignerAction 개체 모델

업데이트: 2007년 11월

디자이너 명령 및 DesignerAction 개체 모델은 디자인 타임에 구성 요소에 대하여 일련의 작업을 지정할 수 있는 일반화된 방법을 제공합니다. 사용자는 이와 같이 일련의 작업을 지정한 다음 디자인 화면에서 이러한 작업에 액세스할 수 있습니다. 가장 일반적인 방법은 구성 요소의 스마트 태그 문자 모양(스마트 태그 문자 모양)을 클릭하고 스마트 태그 패널에서 제공되는 동작 중 하나를 선택하여 이런 작업에 액세스합니다. 이 모델에는 디자이너가 사용자에게 명령을 제공할 수 있는 다양한 방법이 통합되어 있습니다.

스마트 태그

스마트 태그 기능을 사용하면 구성 요소와 컨트롤에서 상황에 맞는 정보와 명령을 사용자에게 표시할 수 있습니다. 스마트 태그는 디자이너 동사의 대체 기능으로 볼 수 있는데, 스마트 태그 항목은 스마트 태그 패널뿐 아니라 구성 요소나 컨트롤과 관련된 바로 가기 메뉴에도 표시할 수 있기 때문입니다.

스마트 태그를 구현하는 방법에 대한 전체 예제를 보려면 방법: Windows Forms 구성 요소에 스마트 태그 연결을 참조하십시오.

디자이너 명령 클래스

다음 표에서는 구성 요소와 컨트롤을 개발할 때 디자이너 명령이 사용자에게 노출되는 방법을 설명합니다.

클래스

설명

MenuCommand

명령 ID에 연결된 대리자입니다. 명령의 텍스트나 위치 또는 기타 메타데이터는 정의하지 않습니다.

DesignerVerb

명령 텍스트와 기타 메타데이터를 정의하는 메뉴 명령입니다. 동사는 일반적으로 디자이너 단위로 제공되며 해당 디자이너와만 관련됩니다. 디자이너 동사는 일반적으로 바로 가기 메뉴나 주 메뉴 모음의 보기 메뉴에 표시됩니다.

DesignerActionItem

수행할 수 있는 대상 동작을 설명하는 텍스트와 기타 메타데이터를 정의하는 메뉴 명령입니다. 작업에서는 일반적으로 사용자가 여러 단계 프로세스를 거치게 됩니다(예: 구성 요소의 데이터 소스 구성).

푸시 및 풀 모델

다음 표에서는 디자인 명령에 프로그래밍 방식으로 액세스하는 두 가지 모델을 보여 줍니다.

모델

설명

푸시

디자이너가 서비스를 구체적으로 요청하고 이 서비스에 명령을 추가합니다.

서비스에서 디자이너를 쿼리하여 디자이너가 제공하는 명령을 확인합니다.

기존 명령 통합

앞의 표에 나열된 디자이너 명령 클래스의 명령들 간에는 공통점이 많습니다. DesignerAction API 에서는 이러한 명령을 조합하여 디자이너 사용자에게 명령을 노출하기 위한 단일형 모델을 제공합니다.

참고:

일부 모델을 지원하지 않는 디자이너도 있습니다. 디자이너는 제공되는 지원의 종류를 쿼리하고 응답에 따라 명령을 제공하는 방법을 변경할 수 있습니다. 또한, 일부 명령의 경우 푸시 모델과 풀 모델 중 하나만 지원될 수도 있습니다. 모든 디자이너가 디자이너 작업을 스마트 태그로 노출하는 것은 아닙니다. 예를 들어, 일부 디자이너는 도구 창에서 디자이너 작업을 노출합니다.

DesignerAction 개체 모델

다음 표에서는 DesignerAction 개체 모델을 구현하는 중요한 클래스에 대해 설명합니다.

클래스

설명

DesignerActionItem

스마트 태그 패널의 패널 항목을 나타냅니다.

DesignerActionList

스마트 태그 패널을 만드는 데 사용되는 항목의 목록을 정의합니다.

DesignerActionService

구성 요소의 DesignerActionItem 개체 컬렉션을 관리하는 디자인 타임 서비스를 설정합니다.

DesignerActionTextItem

패널의 정적 텍스트 항목을 나타냅니다. DesignerActionItem에서 파생됩니다.

DesignerActionPropertyItem

DesignerActionList에서 파생된 클래스의 속성과 연결된 패널 항목을 나타냅니다. DesignerActionItem에서 파생됩니다.

DesignerActionMethodItem

DesignerActionList에서 파생된 클래스의 메서드와 연결된 패널 항목을 나타냅니다. DesignerActionItem에서 파생됩니다.

DesignerActionHeaderItem

스마트 태그 패널의 정적 머리글 항목을 나타냅니다. DesignerActionTextItem에서 파생됩니다.

DesignerAction 개체 모델 사용

구성 요소나 컨트롤의 디자이너 작업을 사용하려면 DesignerActionList 기본 클래스에서 파생시킵니다. 이 파생된 클래스를 사용하여 메뉴와 유사한 UI를 나타내는 스마트 태그 패널을 채웁니다.

파생된 클래스는 virtualGetSortedActionItems 메서드를 재정의하여 DesignerActionItem에서 파생된 개체 컬렉션을 반환할 수 있습니다. 이 개체는 패털 항목을 나타냅니다. 패널에서 각 항목은 형식에 따라 표시됩니다. 예를 들어, DesignerActionTextItem은 정적 텍스트 레이블로 표시됩니다. DesignerActionPropertyItemDesignerActionMethodItem 형식으로 표시되는 활성 패널 항목에는 각각 해당 항목의 기능을 구현하는 공개적으로 액세스할 수 있는 해당 속성이나 메서드가 있습니다.

파생된 클래스가 만들어지면 다음의 두 가지 방법으로 컨트롤에 추가할 수 있습니다.

  • 풀 모델을 사용하는 경우 파생된 클래스의 인스턴스를 ComponentDesigner 클래스의 ActionLists 속성에 추가합니다. 이렇게 하면 상속되는 클래스에서 다른 작업 목록을 제공하고 이들 항목을 병합할 수 있습니다.

  • 푸시 모델을 사용할 경우 Add를 호출하여 파생된 클래스의 인스턴스를 전역 DesignerActionService에 의해 유지 관리되는 컬렉션에 추가합니다. 이 작업 목록은 ComponentDesigner에 의해 유지 관리되는 컬렉션의 작업 목록과 병합합니다.

DesignerActionPropertyItem은 디자이너에서 해당하는 UITypeEditor로 표시됩니다. DesignerActionMethodItem은 디자이너에서 하이퍼링크와 같이 프로그래머 제공 메서드를 호출하는 활성 UI 요소로 표시됩니다. GetSortedActionItems 메서드의 작업 목록 구현은 스마트 태그 패널에 표시될 순서대로 속성과 메서드를 반환합니다.

스마트 태그를 구현하는 전체 예제를 보려면 방법: Windows Forms 구성 요소에 스마트 태그 연결 항목을 참조하십시오.

작업 목록의 기존 동사

기존 DesignerVerb 구현을 가진 컨트롤과 구성 요소는 DesignerActionList 지원을 자동으로 받습니다. 디자인 환경은 구성 요소의 디자이너에서 작업 목록을 쿼리하고 기존 동사에 대해 사용할 수 있는 것이 없으면 하나를 만듭니다.

바로 가기 메뉴의 작업 목록 항목

항목이 바로 가기 메뉴와 작업 목록에 모두 표시되게 하려면 DesignerActionMethodItemIncludeAsDesignerVerb 플래그를 지정합니다.

Add가 호출되면 작업 목록에서 IncludeAsDesignerVerb 플래그가 설정된 DesignerActionMethodItem이 스캐닝됩니다. 이 플래그가 설정된 경우, 해당 항목에 대해 AddVerb 메서드가 호출되어 구성 요소의 동사와 바로 가기 메뉴에 추가됩니다.

디자이너 명령 형식의 변경 내용

.NET Framework 버전 1.1에서 MenuCommandDesignerVerb 클래스는 DesignerAction 개체 모델을 지원하기 위해 약간 변경되었습니다. 이제 두 형식은 Properties라는 새 속성을 노출합니다. 이 속성은 명령 개체의 모든 공용 속성을 저장하는 IDictionary입니다. 사전 키는 공용 속성 이름입니다. 이 속성은 속성의 일반 열거형을 사용 가능하게 하며 클래스 정의를 수정하지 않고도 새 속성을 추가할 수 있는 일관된 기반을 제공합니다.

또한, MenuCommandService 클래스는 IMenuCommandService의 표준 구현을 제공하고 올바른 동사 통합을 수행합니다. 이 클래스는 명령의 추가 및 제거를 알리는 이벤트를 발생시킵니다. 이 클래스를 사용하면 이 이벤트 결과에 따라 UI를 만들 수 있습니다. IMenuCommandServiceMenuCommandService는 서비스 컨테이너에서 사용할 수 있습니다.

참고 항목

작업

방법: Windows Forms 구성 요소에 스마트 태그 연결

참조

DesignerActionList

ComponentDesigner

DesignerVerb

MenuCommand

MenuCommandService

기타 리소스

디자인 타임 지원 확장