다음을 통해 공유


명령 모양 변경

명령의 모양을 변경하여 사용자에게 피드백을 제공할 수 있습니다. 예를 들어 명령을 사용할 수 없는 경우 다르게 표시할 수 있습니다. 명령을 사용할 수 있거나 사용할 수 없게 만들거나, 숨기거나 표시하거나, 메뉴에서 선택하거나 선택 취소할 수 있습니다.

명령의 모양을 변경하려면 다음 작업 중 하나를 수행합니다.

  • 명령 테이블 파일의 명령 정의에 적절한 플래그를 지정합니다.

  • OleMenuCommandService 서비스를 사용합니다.

  • IOleCommandTarget 인터페이스를 구현하고 원시 명령 개체를 수정합니다.

    다음 단계에서는 MPF(관리 패키지 프레임워크)를 사용하여 명령의 모양을 찾고 업데이트하는 방법을 보여 줍니다.

메뉴 명령의 모양을 변경하려면 다음을 수행합니다.

  1. 메뉴 명령의 텍스트 변경의 지침에 따라 New Text라는 메뉴 항목을 만듭니다.

  2. ChangeMenuText.cs 파일에 다음 Using 문을 추가합니다.

    using System.Security.Permissions;
    
  3. ChangeMenuTextPackageGuids.cs 파일에서 다음 줄을 추가합니다.

    public const string guidChangeMenuTextPackageCmdSet= "00000000-0000-0000-0000-00000000";  // get the GUID from the .vsct file
    
  4. ChangeMenuText.cs 파일에서 ShowMessageBox 메서드의 코드를 다음으로 바꿉니다.

    private void Execute(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        var command = sender as OleMenuCommand;
        if (command.Text == "New Text")
            ChangeMyCommand(command.CommandID.ID, false);
    }
    
  5. OleMenuCommandService 개체에서 업데이트하려는 명령을 가져온 다음, 명령 개체에 적절한 속성을 설정합니다. 예를 들어 다음 메서드는 VSPackage 명령 집합에서 지정된 명령을 사용할 수 있거나 사용할 수 없게 만듭니다. 다음 코드는 클릭한 후 New Text라는 메뉴 항목을 사용할 수 없게 만듭니다.

    public bool ChangeMyCommand(int cmdID, bool enableCmd)
    {
        bool cmdUpdated = false;
        var mcs = this.package.GetService<IMenuCommandService, OleMenuCommandService>();
        var newCmdID = new CommandID(new Guid(ChangeMenuTextPackageGuids.guidChangeMenuTextPackageCmdSet), cmdID);
        MenuCommand mc = mcs.FindCommand(newCmdID);
        if (mc != null)
        {
            mc.Enabled = enableCmd;
            cmdUpdated = true;
        }
        return cmdUpdated;
    }
    
  6. 프로젝트를 빌드하고 디버깅을 시작합니다. Visual Studio의 실험적 인스턴스가 표시되어야 합니다.

  7. 도구 메뉴에서 Invoke ChangeMenuText 명령을 클릭합니다. 이때 명령 이름은 Invoke ChangeMenuText이므로 명령 처리기는 ChangeMyCommand()를 호출하지 않습니다.

  8. 이제 도구 메뉴에 새 텍스트가 표시됩니다. 새 텍스트를 클릭합니다. 이제 명령이 회색으로 표시됩니다.