1

Visual Studio 2012에서 현재 열려있는 창이 하나 인 경우 내선 검사를 수행 할 방법을 찾고 있습니다. 사용자가 코드 (또는 텍스트, 정말로). Visual Studio 2012의 현재 문서가 코드 창인지 확인하십시오.

는 현재 열려있는 윈도우가 변경된 경우, 내가

_DTE.Events.WindowEvents.WindowActivated을 사용하여 확인하십시오.

이렇게하면 포커스를받은 EnvDTE.Window이 표시됩니다.

디버깅하는 동안 해당 창의 속성을 볼 때 EnvDTE.Window.Document.Type을보고 값은 "Text"입니다.

그러나 디버깅을 중지하고 Document.Type property에 액세스하려고하면 존재하지 않습니다.

내가 EnvDTE.Window.Document의 문서에서이 속성을 보면, 그 설명을

인프라는 말한다. Microsoft 내부 용.

그래서 지금은 현재 활성화 된 창을위한 솔루션 속성과 같은 I 코드 (또는 다른 것)를 쓸 수 일, 또는 문서의 다른 종류의 (경우 내가 확인할 수 있습니다 방법에 대한 조언을 찾고 있어요 예).

편집 :

나는 또한 Window.Type 및 활성 창의 Window.Kind을 확인했지만, 그들은 그냥 리소스 파일, 이미지 파일 또는 실제 소스 사이의 차별을하지, 문서 있다고 말해 파일, 내가 뭘 찾으려고하는지.

Edit² : 나는 내 확장 해당 문서의 일부에 대한 정보를 저장할 내가 원하는 때문에

난에서 코드를 작성할 수있는 현재 문서가 하나인지 확인하고자하는 이유입니다 저장된 정보 (있는 경우)를 기반으로 마우스 오른쪽 버튼 클릭 상황에 맞는 메뉴를 수정하십시오.

+1

답변을 알았 으면 어떻게해야합니까? –

+1

@JasonMalinowski 미안하지만, 당신이 나에게 무엇을하려고하는지 잘 모르겠습니다. – UrbanCMC

+1

제이슨은 유효한 질문을합니다 : 당신은 무엇을하려고합니까? 'IsTextDocument()'가'false'를 리턴 할 때 코드는 무엇을할까요? 그리고 '사실'은 언제입니까? 텍스트 창이 활성화 될 때 어떤 일이 발생해야합니까? 아마도 귀하의 접근 방식은 당신이하고자하는 일에 대해 잘못된 것이므로 가장 쉬운 해결책은 예를 들어 다른 이벤트에 가입하는 것일 수 있습니다. 귀하가 최종 목표를 설명하지 않으면 제안 할 수 없습니다. – CodeCaster

답변

0

그것은 아닙니다 "진짜"대답,하지만 당신은 VS 고토 명령의 상태를 확인할 수 있습니다 - 그것은 단지 텍스트 편집기 할 수 있습니다 :

bool isCodeWindow = IsCommandAvailable("Edit.GoTo"); 

private bool IsCommandAvailable(string commandName) 
{ 
    EnvDTE80.Commands2 commands = dte.Commands as EnvDTE80.Commands2; 
    if (commands == null) 
     return false; 

    EnvDTE.Command command = commands.Item(commandName, 0); 
    if (command == null) 
     return false; 

    return command.IsAvailable; 
} 
+0

그 문제는 리소스 파일, 이미지 파일 또는 소스 파일을 열지 여부에 상관없이 해당 속성의 값이 동일하다는 것입니다.내가 필요한 것은 현재 활성화 된 문서가 실제로 코드를 작성할 수있는 문서인지 확인하는 방법입니다. – UrbanCMC

+0

업데이트 된 답변을 보내 주셔서 감사합니다. 다른 해결 방법을 찾기 위해 많은 어려움을 덜어 줬습니다. 그것을하는 것이 "최선의"방법은 아닐지 모르지만, 그것은 내가 필요한 것을 할 수있게 해주고 나를 위해 충분합니다. – UrbanCMC

0

문서는 'TextDocument가 있는지 확인할 수 있습니다 '

bool isCodeWindow = dte.CurrentDocument.Object() is EnvDTE.TextDocument;