2012-04-27 81 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) 
    { 
     // ... 
    } 
} 
相关问题