2012-04-27 66 views
10

我正在編寫Visual Studio 2008擴展。每次DTE.ActiveDocument發生更改時,我都會收到通知,所以我可以在自定義面板中更新某些功能,以執行與解決方案資源管理器類似的功能。我還沒有找到發生這種情況時發生的任何事件。有這樣的事件嗎?DTE.ActiveDocument更改時收到通知

具體而言,我正在尋找類似:

var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE; 
dte.Events.DTEEvents.ActiveDocumentChanged += s => { 
    // implies dte.ActiveDocument has changed value 
} 

回答

6

我相信你正在尋找此事件

_applicationObject.Events.WindowEvents.WindowActivated 

檢查GotFocus.Document == null如果你只關心文件激活改變

希望這可以幫助

1

你也可以實現IVsRunningDocTableEvents,將自己註冊爲偵聽器,然後在文檔切換到之前調用OnBeforeDocumentWindowShow方法。

class RdtEvents : IVsRunningDocTableEvents 
{ 
    RdtEvents() 
    { 
     var rdt = Package.GetGlobalService(typeof(SVsRunningDocumentTable)); 
     uint evtCookie; 
     rdt.AdviseRunningDocTableEvents(this, out evtCookie); 
    } 

    // ... 

    int IVsRunningDocTableEvents.OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, IVsWindowFrame pFrame) 
    { 
     // ... 
    } 
} 
相關問題