다음을 통해 공유


방법: 도메인별 언어에서 표준 메뉴 명령 수정

DSL에서 자동으로 정의 된 표준 명령 중 일부의 동작을 수정할 수 있습니다.수정할 수 있습니다 예를 들어, 는 중요 한 정보를 제외 합니다.이렇게 하려면 명령 집합 클래스 메서드를 재정의 합니다.이러한 클래스 DslPackage 프로젝트의 CommandSet.cs 파일에 정의 하 고 파생 된 CommandSet.

명령을 수정할 수 요약 한:

  1. 어떤 명령을 수정할 수 있습니다 발견.

  2. 적절 한 명령 집합 클래스의 partial 선언 만들기.

  3. ProcessOnStatus 및 ProcessOnMenu 메서드를 재정의 합니다. 명령에 대 한.

이 항목에서는이 절차를 설명합니다.

[!참고]

사용자 지정 메뉴 명령을 만들 경우를 참조 하십시오. 방법: 바로 가기 메뉴에 명령 추가.

명령을 수정할 수 있습니다.

어떤 명령이 수정 검색할 수 있습니다.

  1. 에 있는 DslPackage 프로젝트 열기 GeneratedCode\CommandSet.cs.자회사로 솔루션 탐색기에서 C# 파일을 찾을 수 있습니다 CommandSet.tt.

  2. 클래스 이름 끝에이 파일을 찾습니다 "CommandSet" 예를 들어, Language1CommandSet 및 Language1ClipboardCommandSet.

  3. 각 명령 집합 클래스에 형식 "override" 뒤에 공백입니다.IntelliSense에 재정의할 수 있는 메서드 목록이 표시 됩니다.각 명령을 한 쌍의 메서드로 이름이 시작 했습니다 "ProcessOnStatus"및"ProcessOnMenu".

  4. 참고 명령 클래스 집합은 수정 하려는 명령이 포함 되어 있습니다.

  5. 편집 내용을 저장 하지 않고 파일을 닫습니다.

    [!참고]

    일반적으로 생성 된 파일을 편집 해서는 안됩니다.한 편집 내용은 해당 파일이 생성 될 때 손실 됩니다.

적절 한 명령 집합 클래스를 확장 합니다.

명령 집합 클래스의 partial 선언에 포함 된 새 파일을 만듭니다.

설정 명령 클래스를 확장 하려면

  1. 솔루션 탐색기에서 DslPackage 프로젝트를 GeneratedCode 폴더를 엽니다 다음 Commandset.tt에서 확인 및 Commandset.cs에서 생성 된 파일을 엽니다.노트의 첫 번째 이름과 네임 스페이스는 클래스도 정의 합니다.예를 들어, 다음과 같이 나타날 수 있습니다.

    namespace Company.Language1

    { ... internal partial class Language1CommandSet : ...

  2. DslPackage, 사용자 지정 코드 라는 폴더를 만듭니다.이 폴더에 라는 새 클래스 파일을 만들 CommandSet.cs.

  3. 새 파일에 같은 네임 스페이스와 이름으로 생성 된 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...사용자가 명령을 클릭 하 고 명령 기능을 수행 해야 하는 경우 호출 됩니다.하나 또는 두 가지이 방법 모두 재정의 할 수 있습니다.

Dd820672.collapse_all(ko-kr,VS.110).gif메뉴에서 명령이 표시 되 면 변경 하기

해당 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 메서드 해야 없습니다 만들기, 삭제 또는 저장소에서 요소를 업데이트 합니다.

Dd820672.collapse_all(ko-kr,VS.110).gif명령 동작을 변경 하려면

해당 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();
  }
}

코드 변경을 저장소, 만들기, 삭제 또는 요소 또는 링크를 업데이트 하는 경우 내부 트랜잭션을 수행 해야 합니다.자세한 내용은 방법: 도메인별 언어에서 표준 메뉴 명령 수정를 참조하십시오.

Dd820672.collapse_all(ko-kr,VS.110).gif메서드 코드 작성

다음 조각 내에서 이러한 방법을 자주 유용합니다.

  • this.CurrentSelection.사용자를 마우스 오른쪽 단추로 누른 셰이프 도형과 연결선을이 목록에서 항상 포함 됩니다.사용자가 다이어그램의 빈 부분을 클릭 하면 다이어그램 그룹의 유일한 구성원입니다.

  • this.IsDiagramSelected() - true사용자 다이어그램의 빈 부분을 클릭 하면 됩니다.

  • this.IsCurrentDiagramEmpty()

  • this.IsSingleSelection()-사용자가 여러 셰이프를 선택 하지 않은

  • this.SingleSelection-도형 또는 사용자를 마우스 오른쪽 단추로 클릭 하는 다이어그램

  • shape.ModelElement as MyLanguageElement-모델 요소는 도형으로 표시 됩니다.

Element 요소를 탐색 하는 방법에 대 한 개체 및 링크를 만드는 방법에 대 한 자세한 내용은 참조 하십시오. 프로그램 코드에서 모델 탐색 및 업데이트.

참고 항목

작업

방법: 바로 가기 메뉴에 명령 추가

[리디렉션] 연습: 선택한 링크에서 정보 가져오기

참조

MenuCommand

개념

Vspackages에 IDE 사용자 인터페이스 요소를 추가 하는 방법

VSCT XML 스키마 참조

기타 리소스

도메인별 언어를 사용자 지정하는 코드 작성

Visual Studio 명령은 테이블 (.Vsct) 파일

VMSDK – 회로 다이어그램 샘플 광범위 한 DSL 사용자 정의

코드 샘플: 회로 다이어그램