방법: 도메인별 언어에서 표준 메뉴 명령 수정
DSL에서 자동으로 정의 된 표준 명령 중 일부의 동작을 수정할 수 있습니다.수정할 수 있습니다 예를 들어, 컷 는 중요 한 정보를 제외 합니다.이렇게 하려면 명령 집합 클래스 메서드를 재정의 합니다.이러한 클래스 DslPackage 프로젝트의 CommandSet.cs 파일에 정의 하 고 파생 된 CommandSet.
명령을 수정할 수 요약 한:
어떤 명령을 수정할 수 있습니다 발견.
적절 한 명령 집합 클래스의 partial 선언 만들기.
ProcessOnStatus 및 ProcessOnMenu 메서드를 재정의 합니다. 명령에 대 한.
이 항목에서는이 절차를 설명합니다.
[!참고]
사용자 지정 메뉴 명령을 만들 경우를 참조 하십시오. 방법: 바로 가기 메뉴에 명령 추가.
명령을 수정할 수 있습니다.
어떤 명령이 수정 검색할 수 있습니다.
에 있는 DslPackage 프로젝트 열기 GeneratedCode\CommandSet.cs.자회사로 솔루션 탐색기에서 C# 파일을 찾을 수 있습니다 CommandSet.tt.
클래스 이름 끝에이 파일을 찾습니다 "CommandSet" 예를 들어, Language1CommandSet 및 Language1ClipboardCommandSet.
각 명령 집합 클래스에 형식 "override" 뒤에 공백입니다.IntelliSense에 재정의할 수 있는 메서드 목록이 표시 됩니다.각 명령을 한 쌍의 메서드로 이름이 시작 했습니다 "ProcessOnStatus"및"ProcessOnMenu".
참고 명령 클래스 집합은 수정 하려는 명령이 포함 되어 있습니다.
편집 내용을 저장 하지 않고 파일을 닫습니다.
[!참고]
일반적으로 생성 된 파일을 편집 해서는 안됩니다.한 편집 내용은 해당 파일이 생성 될 때 손실 됩니다.
적절 한 명령 집합 클래스를 확장 합니다.
명령 집합 클래스의 partial 선언에 포함 된 새 파일을 만듭니다.
설정 명령 클래스를 확장 하려면
솔루션 탐색기에서 DslPackage 프로젝트를 GeneratedCode 폴더를 엽니다 다음 Commandset.tt에서 확인 및 Commandset.cs에서 생성 된 파일을 엽니다.노트의 첫 번째 이름과 네임 스페이스는 클래스도 정의 합니다.예를 들어, 다음과 같이 나타날 수 있습니다.
namespace Company.Language1
{ ... internal partial class Language1CommandSet : ...
DslPackage, 사용자 지정 코드 라는 폴더를 만듭니다.이 폴더에 라는 새 클래스 파일을 만들 CommandSet.cs.
새 파일에 같은 네임 스페이스와 이름으로 생성 된 partial 클래스는 partial 선언을 작성 합니다.예를 들면 다음과 같습니다.
using System; using System.Collections.Generic; using System.ComponentModel.Design; namespace Company.Language1 /* Make sure this is correct */ { internal partial class Language1CommandSet { ...
참고 클래스 파일 템플릿이 새 파일을 만드는 데 사용 하는 경우 네임 스페이스와 클래스 이름을 수정 해야 합니다.
명령 메서드 재정의
대부분의 명령에 연결 된 두 개의 메서드가 있습니다:이 메서드를 다음과 같이 ProcessOnStatus...명령이 표시 되 고 사용 되는지 여부를 결정 합니다.사용자가 다이어그램을 마우스 오른쪽 단추로 클릭할 때마다 호출 됩니다 해야 신속 하 게 실행 및 변경 하지.ProcessOnMenu...사용자가 명령을 클릭 하 고 명령 기능을 수행 해야 하는 경우 호출 됩니다.하나 또는 두 가지이 방법 모두 재정의 할 수 있습니다.
메뉴에서 명령이 표시 되 면 변경 하기
해당 ProcessOnStatus 다시 정의...메서드.이 메서드는 Visible로 설정 해야 합니다 및 메뉴 명령 매개 변수의 속성을 설정 합니다.일반적으로 명령에 나타납니다.CurrentSelection 명령은 선택한 요소에 적용 되 고 자신의 현재 상태에서 명령을 적용할 수 있는지 확인 하려면 해당 속성에도 보일 수 있습니다 여부를 결정 합니다.
일반적인 지침으로, 어떤 요소에 의해 선택 된 Visible 속성을 결정 합니다.명령을 검정이 나 회색 메뉴를 표시할지 여부를 결정, Enabled 속성을 현재 선택 항목의 상태에 의존 해야 합니다.
사용자가 두 개 이상의 셰이프를 선택한 다음 예제에서는 메뉴 항목 삭제 못하도록 합니다.
[!참고]
이 메서드는 명령 키 입력을 통해 사용할 수 있는지 여부 적용 되지 않습니다.예를 들어, 삭제 메뉴 항목 사용 안 함 명령을 통해 키가 호출 되 고 금지 하지 않습니다.
/// <summary>
/// Called when user right-clicks on the diagram or clicks the Edit menu.
/// </summary>
/// <param name="command">Set Visible and Enabled properties.</param>
protected override void ProcessOnStatusDeleteCommand (MenuCommand command)
{
// Default settings from the base method.
base.ProcessOnStatusDeleteCommand(command);
if (this.CurrentSelection.Count > 1)
{
// If user has selected more than one item, Delete is greyed out.
command.Enabled = false;
}
}
먼저 기본 메서드를 호출 하 고는 모든 경우 및 사용을 걱정할 수 없는 설정으로 처리 하는 것이 좋습니다 것입니다.
ProcessOnStatus 메서드 해야 없습니다 만들기, 삭제 또는 저장소에서 요소를 업데이트 합니다.
명령 동작을 변경 하려면
해당 ProcessOnMenu 다시 정의...메서드.다음 예제에서는 사용자 요소가 두 개 이상 한 번에 키를 사용 하 여 경우에 삭제할 수 없습니다.
/// <summary>
/// Called when user presses Delete key
/// or clicks the Delete command on a menu.
/// </summary>
protected override void ProcessOnMenuDeleteCommand()
{
// Allow users to delete only one thing at a time.
if (this.CurrentSelection.Count <= 1)
{
base.ProcessOnMenuDeleteCommand();
}
}
코드 변경을 저장소, 만들기, 삭제 또는 요소 또는 링크를 업데이트 하는 경우 내부 트랜잭션을 수행 해야 합니다.자세한 내용은 방법: 도메인별 언어에서 표준 메뉴 명령 수정를 참조하십시오.
메서드 코드 작성
다음 조각 내에서 이러한 방법을 자주 유용합니다.
this.CurrentSelection.사용자를 마우스 오른쪽 단추로 누른 셰이프 도형과 연결선을이 목록에서 항상 포함 됩니다.사용자가 다이어그램의 빈 부분을 클릭 하면 다이어그램 그룹의 유일한 구성원입니다.
this.IsDiagramSelected() - true사용자 다이어그램의 빈 부분을 클릭 하면 됩니다.
this.IsCurrentDiagramEmpty()
this.IsSingleSelection()-사용자가 여러 셰이프를 선택 하지 않은
this.SingleSelection-도형 또는 사용자를 마우스 오른쪽 단추로 클릭 하는 다이어그램
shape.ModelElement as MyLanguageElement-모델 요소는 도형으로 표시 됩니다.
Element 요소를 탐색 하는 방법에 대 한 개체 및 링크를 만드는 방법에 대 한 자세한 내용은 참조 하십시오. 프로그램 코드에서 모델 탐색 및 업데이트.
참고 항목
작업
참조
개념
Vspackages에 IDE 사용자 인터페이스 요소를 추가 하는 방법
기타 리소스
Visual Studio 명령은 테이블 (.Vsct) 파일