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 == true) return;
37
if (projectItem == null) return;
38
if (item == null) return;
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
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 == true) return;37
if (projectItem == null) return;38
if (item == null) return;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
posted on 2009-11-03 16:15 时空地图-TimeGIS-com 阅读(694) 评论(0) 收藏 举报

浙公网安备 33010602011771号