VS插件开发:如何获取VS解决方案资源管理器中文件夹、文件的重命名事件 如题:如何获取VS解决方案资源管理器中文件夹、文件的重命名事件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DTE2 app; app.Events.SolutionItemsEvents.ItemRenamed += (pitem, oldName)=> { //to do... } app.Events.SolutionEvents.ProjectRenamed += (prj, oldName)=> { //to do... }; 楼上的不错啊。vsx技术群 欢迎 首先感谢您的关注,上面的方法我最初也都试过,但就是不行,不知道出错在哪里,我自己又新建新的插件工程测试还是不行 /// <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");希望知道我错在哪的、或有别的思路的朋友说一下,感谢不尽!!! try...((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed 非常感谢,按照您的这种方式实现了工程、文件夹、文件的重命名!(C#环境下使用)现在项目要求,开发的插件要用在VC++环境下,这样的做法会出两个功能实现不了,但这些功能切是项目的最终需求1、//这方法对VC++的工程重命名无效((EnvDTE80.Events2)_applicationObject.Events).SolutionEvents.ProjectRenamed+=...2、//当点击“解决方案资源管理器”的“显示所有文件”后,新建一个文件夹,这时再重命名就无效((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed+=...哎,这次项目就是用C#开发VC++用的插件,在插件里用的方法,在测试环境为C#、VC++产生的效果总有些不一样我也试过用 FileSystemWatcher 类去做,但也达不到效果 不管是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 就等您的回复了,^-^哎,为什么在我这里这些事件都不触发,只要是运行是VC++,当重命名工程、文件夹就无效(对文件、筛选器有效)VC++中,文件夹中有分两种:1、筛选器(刚进入VS时,“解决方案资源管理器”的“显示所有文件”按钮是不选中的,该文件夹只存在于资源管理器中,但在硬盘上是没有目录对应的),NewFilter2、文件夹(当点击“解决方案资源管理器”的“显示所有文件”后,再新建的文件夹,该文件在硬盘上是存在的),重命名的事件需要 ProjectItem 参数,这个文件夹返回为Null,NewFolder已经是没想法了,昨天都搞了一天 WPF如何形成 鼠标和窗口互斥 关于c# ArrayList的问题 表达方式 关于利用反射取属性值的问题 wpf 关于DataGridComboBoxColumn 的疑问 在线等,,高手指点。。。 多线程问题? 熟悉批处理命令的进,承诺解决后12小时内结贴 TabControl控件中,哪个属性或方法可以使TAB是用户自己指定显示的那个。 如何在C#中用函数把2进制数据转换成字符串数据显示出来? 请问在写“SystemInfo”类里写了一个“SystemInfo”空方法是什么意思? 细说“简单工厂模式”及优缺点
DTE2 app;
app.Events.SolutionItemsEvents.ItemRenamed += (pitem, oldName)=>
{
//to do...
} app.Events.SolutionEvents.ProjectRenamed += (prj, oldName)=>
{
//to do...
};
vsx技术群 欢迎
首先感谢您的关注,上面的方法我最初也都试过,但就是不行,不知道出错在哪里,
我自己又新建新的插件工程测试还是不行
/// <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");
希望知道我错在哪的、或有别的思路的朋友说一下,感谢不尽!!!
((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed
非常感谢,按照您的这种方式实现了工程、文件夹、文件的重命名!(C#环境下使用)现在项目要求,开发的插件要用在VC++环境下,这样的做法会出两个功能实现不了,
但这些功能切是项目的最终需求1、//这方法对VC++的工程重命名无效
((EnvDTE80.Events2)_applicationObject.Events).SolutionEvents.ProjectRenamed+=...
2、//当点击“解决方案资源管理器”的“显示所有文件”后,新建一个文件夹,这时再重命名就无效
((EnvDTE80.Events2)_applicationObject.Events).ProjectItemsEvents.ItemRenamed+=...
哎,这次项目就是用C#开发VC++用的插件,在插件里用的方法,在测试环境为C#、VC++产生的效果总有些不一样我也试过用 FileSystemWatcher 类去做,但也达不到效果
请尝试:
#1:
((EnvDTE80.Events2)_applicationObject.Events).ProjectsEvents.ItemRenamed #2:
((EnvDTE80.Events2)_applicationObject.Events).MiscFilesEvents.ItemRenamed
就等您的回复了,^-^哎,为什么在我这里这些事件都不触发,只要是运行是VC++,当重命名工程、文件夹就无效(对文件、筛选器有效)VC++中,文件夹中有分两种:
1、筛选器(刚进入VS时,“解决方案资源管理器”的“显示所有文件”按钮是不选中的,该文件夹只存在于资源管理器中,但在硬盘上是没有目录对应的),NewFilter
2、文件夹(当点击“解决方案资源管理器”的“显示所有文件”后,再新建的文件夹,该文件在硬盘上是存在的),重命名的事件需要 ProjectItem 参数,这个文件夹返回为Null,NewFolder已经是没想法了,昨天都搞了一天