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

来源:互联网 发布:淘宝抢单 编辑:程序博客网 时间:2024/05/01 02:47

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

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

源程序下载地址: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.0 Microsoft Visual Studio 2010 9.0 Microsoft Visual Studio 2008 8.0 Microsoft Visual Studio 2005 7.1 Microsoft Visual Studio .NET 2003 7.0 Microsoft Visual Studio .NET (2002)

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

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

 

原创粉丝点击