KuaiShou Sync 一个有关Visual Studio.NET 的插件

Visual Studio.Net 打开一个工程的时候,有时候子项目很多,而且你有不是很熟悉这个项目。

然后你查找某个关键字,打开一个文件,你需要知道它在Solution Explorer中属于哪里,也就是高亮这个文件节点,

你应该怎么做?这里提供一个办法供你参考。

我们知道 Visual Studio.Net 提供了可扩展性开发的功能,也就是插件功能,比较有名的是Visual AssistX

另外有很多文章介绍如何开发插件,

http://www.cnblogs.com/anderslly/archive/2009/02/25/first-macro-addin.html

http://www.cnblogs.com/anderslly/archive/2009/02/28/vs-addin-explained-part1.html

http://www.cnblogs.com/anderslly/archive/2009/03/03/vs-addin-explained-part2.html

我的方法是先得到就是从SolutionExplorer的Item中一个个找当前的ProjectItem,然后高亮,很简单。

相关代码如下,请指教

 1          public   void  Exec( string  commandName, vsCommandExecOption executeOption,  ref   object  varIn,  ref   object  varOut,  ref   bool  handled)
 2          {
 3            handled = false;
 4            if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
 5            {
 6                if(commandName == "SyncAddin.Connect.SyncAddin")
 7                {
 8                    DoSync();
 9                    handled = true;
10                    return;
11                }

12            }

13        }

14
15          private   bool  bFound;
16          public   void  DoSync()
17          {
18            //_applicationObject.ActiveDocument.ProjectItem.ExpandView();
19
20            ProjectItem projectitem = _applicationObject.ActiveDocument.ProjectItem;
21
22            UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
23            UIH.Parent.SetFocus();
24
25            // Requires a reference to System.Text.
26            // Set a reference to the first level nodes in Solution Explorer. 
27            // Automation collections are one-based.
28            UIHierarchyItem UIHItem = UIH.UIHierarchyItems.Item(1);
29
30            bFound = false;
31            RecursiveFindItem(projectitem, UIHItem);
32        }

33
34          private   void  RecursiveFindItem(ProjectItem projectItem, UIHierarchyItem item)
35          {
36            if (bFound == truereturn;
37            if (projectItem == nullreturn;
38            if (item == nullreturn;
39
40            if (projectItem.Name == item.Name)
41            {
42                item.Select(vsUISelectionType.vsUISelectionTypeSelect);
43                bFound = true;
44                return;
45            }

46
47            foreach (UIHierarchyItem subitem in item.UIHierarchyItems)
48                RecursiveFindItem(projectItem, subitem);
49        }

50

 

整个项目(for vs 2008) 从这里下载:/Files/kuaishou/SyncAddin.7z

 

你可能感兴趣的:(.net)