Visual Studio 2008 可扩展性开发(六):操作Solution Explorer
前言
在可扩展性开发(五)中,我介绍了对于Solution、Project、ProjectItem的基本操作。可以认为它们面向的是解决方案内容的物理(文件)表示,我们需要使用VS提供的解决方案管理器(Solution Explorer)来管理它们。毫无疑问,解决方案管理器是VS中最重要的UI元素之一,本文将介绍对它的操作。
工具窗口内的层次结构
如果你观察一下解决方案管理器和服务器管理器(Server Explorer),就会发现它们都使用树形结构来表现背后的数据。在AOM中,UIHierarchy、UIHierarchyItems和UIHierarchyItem用于表示这样的层次结构。UIHierarchy表示根节点,它的UIHierarchyItems集合表示其所包含的第一级子节点(UIHierarchyItem),每一个UIHierarchyItem同时也有UIHierarchyItems属性,如此递归下去。这种结构很像它们所表示的数据:Solution、Project以及ProjectItem。在使用这些对象之前,先大致了解一下它们的主要成员:
1)UIHierarchy
Parent:节点对象的父节点;
SelectedItems:当前节点选中的子节点集合;
UIHierarchyItems:当前节点的子节点集合;
DoDefaultAction():对节点进行默认操作,类似于进行双击或按下回车键;
GetItem():按指定路径返回一个子节点;
SelectDown():选中当前选中节点的下个节点;
SelectUp():选中当前选中节点的上个节点;
更多信息请参看MSDN。
2)UIHierarchyItems集合
Expanded:获取或设置所表示的节点是否已展开;
Parent:节点集合的父节点;
Item():返回集合中的一项;
更多信息请参看MSDN。
3)UIHierarchyItem
IsSelected:获取节点是否被选中;
Name:节点对象的名称;
Select():选中节点;
更多信息请参看MSDN。
有了这些知识,我们现在有能力去探索对解决方案管理器的操作了。
CollapseAllProjects示例
项目刚开始的时候,项目的数量也许还不太多,随着程序规模的增大,项目数量也会不断增加,这时要找到某个项目或者某个文件,就变得越来越麻烦,你得先把大量的项目折叠起来。如果有一个命令,可以快速地折叠起所有项目,就方便多了:
这里的思路很简单,只要找到所有的项目节点,依次查看每个项目,如果项目展开了,就把它折叠起来。
0)添加命令
之前我们曾添加过CloseAllDocuments和NPetshopSlnGenerator命令(见可扩展性开发四、五),它们分别加在文本编辑器的标签和Tools菜单上,这里的过程没什么不同:
OnConnection()
{
// Get "Solution Explorer" command bar
CommandBar slnCommandBar = GetCommandBarByName("Solution");
// Add a new command
AddNamedCommand2(slnCommandBar, COLLAPSE_ALL_PROJECTS_COMMAND_NAME,
"Collapse All Projects", "Collapse All Projects", false, 0, slnCommandBar.Controls.Count + 1);
}
QueryStatus()
{
else if (commandName == GetCommandFullName(COLLAPSE_ALL_PROJECTS_COMMAND_NAME))
{
status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled;
return;
}
}
Exec()
{
else if (commandName == GetCommandFullName(COLLAPSE_ALL_PROJECTS_COMMAND_NAME))
{
CollapseAllProjects();
handled = true;
return;
}
}
这里通过“Solution”找到解决方案节点的上下文菜单。
1)找到所有项目节点
也许比预想的要复杂些,主要的原因是解决方案文件夹的存在,解决方案文件夹本身也被看作Project对象,同时它又可以包含其它真正的项目,所以在查找项目的时候要分两种情况。先查找解决方案下面的项目,然后再查找解决方案文件夹下面的项目。
2)折叠所有项目节点
private void CollapseAllProjects()
{
Solution sln = _applicationObject.Solution;
List<UIHierarchyItem> projects = GetProjectNodes(sln);
foreach (UIHierarchyItem item in projects)
{
CollapseProject(item);
}
}
private void CollapseProject(UIHierarchyItem project)
{
if (project.UIHierarchyItems.Expanded)
{
if (IsDirectProjectNode(project))
{
project.UIHierarchyItems.Expanded = false;
}
else if (IsProjectNodeInSolutionFolder(project))
{
project.Select(vsUISelectionType.vsUISelectionTypeSelect);
SolutionExplorerNode.DoDefaultAction();
}
}
}
这里就简单了,对于每个项目,通过Expanded属性判断它是否已展开,如果是的话将其折叠起来,此时也要分两种情况进行考虑。
以后就不用再为那些包含数十个项目的解决方案发愁了:)
可以从这里下载代码,也可以在这里下载可运行的Add-In(解压缩后将文件放在[My Documents Path]Visual Studio 2008Addins下)。
我们身在何处?
在解决方案、项目和项之后,本文介绍了对解决方案管理器的操作,现在我们有办法来解决这些方面的问题了。接下来,我将介绍Add-In开发的重头戏——文本编辑器的操作。
参考
《Professional Visual Studio® 2008 Extensibility》
《Working with Microsoft Visual Studio® 2005》
PowerCommands Project
相关文章
- PyQt5 图形界面 - Qt Designer设置简体中文方法演示,Qt Designer字体设置,Qt Designer工具单独安装包获取,Qt Designer简体中文语言包获取
- T资讯 | 鸿蒙之父离职、知乎回应新一轮裁员、SpaceX估值超过半个阿里
- PyQt5 图形界面 - Qt Designer独立安装包,仅需30M!python图像化界面绘制工具
- Windows 技术篇-最新win10系统下查看热键被哪个程序占用,windows10系统查看占用快捷键的所有程序
- 2.7-Air302(NB-IOT)-基础外设-DS18B20温度传感器实验
- Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
- Windows 技术篇 - 通过注册表修改远程桌面连接的端口号实例演示
- Windows 技术篇 - 无需确认快速删除包含大量文件的目录,cmd删除文件的rmdir、del、erase和rd四种命令使用方法
- 机器人落地「秘诀」:持续学习、知识迁移和自主参与
- 康奈尔计算学院院长Kavita Bala:「元宇宙」算什么?上帝之眼或将通过 AI 诞生
- windows 技术篇 - cmd命令查看当前目录下的所有文件和文件夹以及所有子目录下的文件,dir命令的使用方法
- 2022全球科技企业裁员形势图,大厂仍是赢家!
- 2-视频传输,监控,直播方案-搭建视频流服务器,推送视频流,拉取视频流观看(RTMP,m3u8)
- Windows 技术篇 - win10复制文件或文件夹时出错,提示“文件或目录损坏且无法读取“问题解决。windows驱动器、磁盘修复方法
- Windows 技术篇 - 2021年最新版win10设置默认输入法,时间和语言找不到默认输入法设置解决方法
- 3-视频传输,监控,直播方案-网页端播放视频流(RTMP,HLS,m3u8)
- Windows 技术篇-win10、win7设置电脑自动锁屏(非关闭显示器),设置电脑黑屏并锁屏方法
- Windows 技术篇-win10运行没有、不保存历史记录解决方法,win10文件夹浏览记录为空问题解决
- Windows 技术篇-Foxmail邮箱客户端使用过程中一直提示“密码错误,请输入您的QQ密码”问题解决方法
- 用效能打败996,你掌握了高效的软件开发思维了吗?