如题:如何获取VS解决方案资源管理器中文件夹、文件的重命名事件

解决方案 »

  1.   


                DTE2 app;
                
                app.Events.SolutionItemsEvents.ItemRenamed += (pitem, oldName)=>
                {
                    //to do...
                }            app.Events.SolutionEvents.ProjectRenamed += (prj, oldName)=>
                {
                    //to do...
                };
      

  2.   

    楼上的不错啊。
    vsx技术群 欢迎
      

  3.   


    首先感谢您的关注,上面的方法我最初也都试过,但就是不行,不知道出错在哪里,
    我自己又新建新的插件工程测试还是不行
    /// <summary>实现 IDTExtensibility2 接口的 OnConnection 方法。接收正在加载外接程序的通知。</summary>
    /// <param term='application'>宿主应用程序的根对象。</param>
    /// <param term='connectMode'>描述外接程序的加载方式。</param>
    /// <param term='addInInst'>表示此外接程序的对象。</param>
    /// <seealso class='IDTExtensibility2' />
    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;            if (connectMode == ext_ConnectMode.ext_cm_AfterStartup )
                {
                   // _applicationObject.Events.SelectionEvents.OnChange += new _dispSelectionEvents_OnChangeEventHandler(SelectionEvents_OnChange);//这方法有效                _applicationObject.Events.SolutionItemsEvents.ItemAdded += new _dispProjectItemsEvents_ItemAddedEventHandler(SolutionItemsEvents_ItemAdded);//无效果
                    _applicationObject.Events.SolutionItemsEvents.ItemRemoved += new _dispProjectItemsEvents_ItemRemovedEventHandler(SolutionItemsEvents_ItemRemoved);//无效果
                    _applicationObject.Events.SolutionItemsEvents.ItemRenamed += new _dispProjectItemsEvents_ItemRenamedEventHandler(SolutionItemsEvents_ItemRenamed);//无效果
                }
    }        void SelectionEvents_OnChange()
            {
                MessageBox.Show("selection change");
            }        void SolutionItemsEvents_ItemRenamed(ProjectItem ProjectItem, string OldName)
            {
                MessageBox.Show(OldName);
            }        void SolutionItemsEvents_ItemRemoved(ProjectItem ProjectItem)
            {
                MessageBox.Show("remove");
            }        void SolutionItemsEvents_ItemAdded(ProjectItem ProjectItem)
            {
                MessageBox.Show("add");
    希望知道我错在哪的、或有别的思路的朋友说一下,感谢不尽!!!
      

  4.   

    try...
    ((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed
      

  5.   


    非常感谢,按照您的这种方式实现了工程、文件夹、文件的重命名!(C#环境下使用)现在项目要求,开发的插件要用在VC++环境下,这样的做法会出两个功能实现不了,
    但这些功能切是项目的最终需求1、//这方法对VC++的工程重命名无效
    ((EnvDTE80.Events2)_applicationObject.Events).SolutionEvents.ProjectRenamed+=...
    2、//当点击“解决方案资源管理器”的“显示所有文件”后,新建一个文件夹,这时再重命名就无效
    ((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed+=...
    哎,这次项目就是用C#开发VC++用的插件,在插件里用的方法,在测试环境为C#、VC++产生的效果总有些不一样我也试过用 FileSystemWatcher 类去做,但也达不到效果
      

  6.   

    不管是C#,VB.Net,C++/CLR,C++/ATL都可以开发VS Addin,跟是否是C#开发Addin提供给VC++使用无关.
    请尝试:
    #1:
    ((EnvDTE80.Events2)_applicationObject.Events).ProjectsEvents.ItemRenamed #2:
    ((EnvDTE80.Events2)_applicationObject.Events).MiscFilesEvents.ItemRenamed 
      

  7.   


    就等您的回复了,^-^哎,为什么在我这里这些事件都不触发,只要是运行是VC++,当重命名工程、文件夹就无效(对文件、筛选器有效)VC++中,文件夹中有分两种:
    1、筛选器(刚进入VS时,“解决方案资源管理器”的“显示所有文件”按钮是不选中的,该文件夹只存在于资源管理器中,但在硬盘上是没有目录对应的),NewFilter
    2、文件夹(当点击“解决方案资源管理器”的“显示所有文件”后,再新建的文件夹,该文件在硬盘上是存在的),重命名的事件需要 ProjectItem 参数,这个文件夹返回为Null,NewFolder已经是没想法了,昨天都搞了一天