일반적으로 편집기처럼 디자이너는 사용자가 코드 요소를 수정할 때 최근 변경 내용을 되돌릴 수 있도록 실행 취소 작업을 지원해야 합니다.
Visual Studio에서 구현된 대부분의 디자이너는 환경에 의해 자동으로 "실행 취소" 기능을 제공합니다.
실행 취소 기능에 대한 지원을 제공해야 하는 디자이너 구현:
추상 기본 클래스를 구현하여 실행 취소 관리 제공 UndoEngine
IDesignerSerializationService 및 IComponentChangeService 클래스를 구현하여 지속성 및 CodeDOM 지원을 제공합니다.
.NET Framework를 사용하여 디자이너를 작성하는 방법에 대한 자세한 내용은 Design-Time 지원 확장을 참조하세요.
Visual Studio SDK는 다음을 통해 기본 실행 취소 인프라를 제공합니다.
OleUndoEngine 및 OleUndoEngine.UndoUnit 클래스를 통한 실행 취소 관리 구현 제공.
기본 CodeDomComponentSerializationService 및 IComponentChangeService 구현을 통해 지속성 및 CodeDOM 지원을 제공합니다.
실행 취소 지원을 자동으로 획득하기
Visual Studio에서 만든 모든 디자이너는, 디자이너일 경우 자동 및 전체 실행 취소 지원을 제공합니다.
사용자 인터페이스에 Control 기반 클래스를 사용합니다.
코드 생성 및 지속성을 위해 표준 CodeDOM 기반 코드 생성 및 구문 분석 시스템을 사용합니다.
Visual Studio CodeDOM 지원 작업에 대한 자세한 내용은 동적 소스 코드 생성 및 컴파일을 참조하세요.
디자이너 실행 취소를 명시적으로 지원하는 경우
디자이너는 Control에서 제공된 것이 아닌 뷰 어댑터라는 그래픽 사용자 인터페이스를 사용하는 경우, 자체적인 undo 관리를 해야 합니다.
예를 들어 .NET Framework 기반 그래픽 인터페이스가 아닌 웹 기반 그래픽 디자인 인터페이스를 사용하여 제품을 만들 수 있습니다.
이러한 경우, 이 뷰 어댑터를 Visual Studio에 ProvideViewAdapterAttribute로 등록하고 명시적인 실행 취소 관리 기능을 제공해야 합니다.
디자이너는 이름 공간에 제공된 System.CodeDom Visual Studio 코드 생성 모델을 사용하지 않는 경우 CodeDOM 및 지속성 지원을 제공해야 합니다.
디자이너의 실행 취소 지원 기능
환경 SDK는 사용자 인터페이스를 위해 Control 기반 클래스나 표준 CodeDOM 및 지속성 모델을 사용하지 않는 디자이너들이 사용할 수 있도록 필요한 인터페이스에 대한 기본 구현을 제공하여 실행 취소 지원을 제공합니다.
OleUndoEngine 클래스는 실행 취소 작업을 관리하기 위해 IOleUndoManager 클래스의 구현을 사용하여 .NET Framework UndoEngine 클래스에서 파생됩니다.
Visual Studio는 디자이너 실행 취소에 다음 기능을 제공합니다.
여러 디자이너 간에 연결된 실행 취소 기능입니다.
디자이너 내의 자식 단위는 OleUndoEngine.UndoUnit에서 IOleUndoUnit 및 IOleParentUndoUnit을 구현하여 부모와 상호 작용할 수 있습니다.
환경 SDK는 다음을 제공하여 CodeDOM 및 지속성 지원을 제공합니다.
CodeDomComponentSerializationService의 구현 방법으로 IDesignerSerializationService
Visual Studio 디자인 호스트가 제공하는 IComponentChangeService입니다.
환경 SDK 기능을 사용하여 실행 취소 지원 제공
실행 취소 지원을 얻으려면 디자이너를 구현하는 개체가 유효한 OleUndoEngine 구현을 사용하여 클래스 인스턴스 IServiceProvider 를 인스턴스화하고 초기화해야 합니다. 이 IServiceProvider 클래스는 다음 서비스를 제공해야 합니다.
-
Visual Studio CodeDOM serialization을 사용하는 디자이너는 IDesignerSerializationService의 구현으로 Visual Studio SDK와 함께 제공된 CodeDomComponentSerializationService를 사용하기로 선택할 수 있습니다.
이 경우 생성자에 제공된 클래스는 IServiceProvider 이 개체를 OleUndoEngine 클래스의 IDesignerSerializationService 구현으로 반환해야 합니다.
-
Visual Studio 디자인 호스트에서 제공하는 기본값 DesignSurface을 사용하는 디자이너는 IComponentChangeService 클래스의 기본 구현을 갖는 것이 보장됩니다.
디자이너가 OleUndoEngine 기반의 실행 취소 메커니즘을 구현할 때, 다음과 같은 경우 변경 내용을 자동으로 추적합니다.
TypeDescriptor 객체를 통해 속성이 변경됩니다.
IComponentChangeService 이벤트는 실행 취소할 수 있는 변경이 커밋될 때 수동으로 생성됩니다.
디자이너에 대한 수정이 .의 DesignerTransaction컨텍스트 내에서 만들어졌습니다.
디자이너는 UndoEngine.UndoUnit 구현에서 제공하는 표준 실행 취소 단위 또는 OleUndoEngine.UndoUnit에서 UndoEngine.UndoUnit로부터 파생된 Visual Studio 관련 구현을 사용하여 실행 취소 단위를 명시적으로 만들도록 선택합니다. 또한 OleUndoEngine.UndoUnit은 IOleUndoUnit와 IOleParentUndoUnit의 구현도 제공합니다.