更改Visual Studio“最近的项目”列表的程序编程

         天啊,太悲惨了!在浏览器上都写了好长一段,因为上传一张图片服务器没有反应,导致前面的工作毁于一旦。以前就感觉在浏览器上面写东西很危险,今天有幸领教了,再不敢了!

言归正传:先看一下程序界面吧:

源程序下载地址:http://download.csdn.net/source/1957681


用过Visual Studio .NET版本以后IDE开发工具的人肯定都知道Visual Studio里面那个“起始页”以及“起始页”里面的那个“最近的项目”
        不错!“最近的项目”里面保存着我们最近创建和打开的项目文件,为我们快速打开项目提供了一个很好的方式,避免左拐右撞在文件系统中找寻项目的路径。
        可是,总感觉这个“最近的项目”有些地方做得不是很完善。比如说:
        1、有的时候为了寻求一点帮助打开了别人的项目或是自己以前的项目,这样的不常用项目也会保存在“最近的项目”列表中,占据有限的资源。(“最近的项目”那个栏空间就那么一点,显示不了几个的。而且似乎也没办法扩展,反正我没找到方法)。
        2、有的时候一个项目做完了,这个项目还是天天摆在那里,好像是在炫耀自己一样。殊不知,同样是浪费资源。
        3、Visual Studio中没有提供(或我没找到)删除“最近的项目”中项目的方法。
         基于以上考虑,我就想自己管理那个“最近的项目”列表。
        首先、我翻遍计算机,寻找“最近的项目”的藏身之处。可最后,还是Google告诉了我:这个项目列表藏在注册表HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/9.0/ProjectMRUList子键中(以Visual Studio 2008为例)。
        名称为“File<序号>”形式,键值为项目文件的完整路径。
        这样我就可以通过增减这个注册表来控制“最近的项目”列表了。
做了几次,又发现这种方法太费劲了,每次都要从上到下找到注册表,再删除一些。麻烦!!!
         于是就想编一个小程序来控制这个注册表的修改与增补。
        用C#编写控制注册表的程序并不难,只要“using Microsoft.Win32;”再利用Registry和RegistryKey这两个类就好了;读取注册表后将列表显示在dataGridView中,通过对dataGridView的行(Rows)进行移动、添加和删除操作并将操作后的列表保存到注册表中来达到改变“最近的项目”列表的目的。
        程序的重点有以下几处:
         1、读取注册表。
        RegistryKey类的详细信息参见http://msdn.microsoft.com/zh-cn/library/microsoft.win32.registrykey.aspx 这里我只列出我所用到的方法:
        声明:        
Code:
  1. RegistryKey key = Registry.CurrentUser.CreateSubKey("Software//Microsoft//VisualStudio");  
         方法:
Code:
  1. key.GetSubKeyNames();//获取key下的所有子键名称,该方法返回一个字符串数组(string[])。  
  2. key.GetValueNames();//获取key下的所有项的名称,该方法同样返回一个字符串数组(string[])。就是用这个方法读取项目列表的。  
  3. key.SetValue("file"+(i+1).ToString(), dataGridView1[1, i].Value.ToString(), RegistryValueKind.ExpandString);//设置(创建)项。这个方法参数很多,而且有几种重载格式,我所用到的重载格式个参数的含义依次为:项名称、数据、注册表类型。  
  4. key.DeleteValue(keyNames[i], false);//删除项。参数分别为:项名称、指示在找不到指定值的情况下是否引发异常。  
  5. key.Close();//使用完了,自然要把打开的注册表关上了。  

         2、修改dataGridView的行(Rows)。
        这里面涉及到将数据添加到dataGridView和对某一行执行置顶、置底、上移、下移、删除操作,还要能够执行添加新行的操作。
         向dataGridView中添加数据可以通过几种方法实现:         
Code:
  1. dataGridView1.Rows[n].SetValues(item);//这里n是行的序数,item是object[]型变量。具体操作可以参见我上传的完整项目文件。  
  2. dataGridView1[Column, Row].Value = "字符串";  
  3. dataGridView1.Rows[Row].Cells[Column].Value = "字符串";  
        以上后两种方法应该算是等价的,即对单独的单元格进行设置。其中Row是行序号,Column是列序号。
        对行进行操作。
        操作是在修改行 的基础上进行的,无非就是再声明一个缓存变量,将几个相关行的内容反过来倒回去。这里就不讲这个过程了,感兴趣的可以看一下源程序。
        在对dataGridView的行进行操作时,有一点需要注意,那就是dataGridView的RowCount属性。在操作(主要是增加)过程中,必须始终操作RowCount以内的行,否则会抛出异常。
        为了使dataGridView的RowCount始终与项目个数相等,在删除项目时还要记得执行RowCount--;的操作。这里有个现象很奇怪:当选中最后一行执行删除操作时,在RowCount--;之后,总是删除倒数第二行的数据,而把最后一行补上来。调试很多次一直没找到原因。也许dataGridView就是这样设计的吧。不管了,我也用了一个似乎不太合乎常规的方法将这个问题解决了,那就是执行删除最后一行时,在RowCount--;之前将最后一行的值也赋成倒数第二行的值。最后两个都是倒数第二行的值,不管你删哪个,最后得到的结果都一样。问题就解决了。
         3、根据注册表判断电脑上有哪几个版本的Visual Studio。
        这里主要通过注册表(HKEY_CURRENT_USER/Software/Microsoft/VisualStudio/9.0/ProjectMRUList)中记录的版本号(9.0)来确定。在网上搜了一下,版本号与Visual Studio版本的对应关系应该是这样的:
Visual Studio 版本对应关系
版本号版本
10.0Microsoft Visual Studio 2010
9.0Microsoft Visual Studio 2008
8.0Microsoft Visual Studio 2005
7.1Microsoft Visual Studio .NET 2003
7.0Microsoft Visual Studio .NET (2002)

        我就是按照这样的关系编的程序。如果谁发现上面的对应关系搞错了,请提醒我一下。

        好了,解决这三个问题之后其余的就没有什么难度了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值