更改Visual Studio“最近的項目”列表的程式編程

來源:互聯網
上載者:User

         天啊,太悲慘了!在瀏覽器上都寫了好長一段,因為上傳一張圖片伺服器沒有反應,導致前面的工作毀於一旦。以前就感覺在瀏覽器上面寫東西很危險,今天有幸領教了,再不敢了!

言歸正傳:先看一下程式介面吧:

來源程式: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)

        我就是按照這樣的關係編的程式。如果誰發現上面的對應關係搞錯了,請提醒我一下。
        好了,解決這三個問題之後其餘的就沒有什麼難度了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.