前言
在可擴充性開發(六)中,我介紹了對於Solution Explorer的基本操作。不過,對咱 們開發人員來說,絕大部分時間面對的還是編輯器。
VS2008的編輯器功能已經頗為強大了,如果我們能熟練使用快速鍵,編寫代碼的過程 是相當舒服的,就像《卓有成效的程式員》中所說:
“編程時始終優先使用鍵盤而非滑鼠”
但問題在於,VS面向的是所有的開發人員群體,它只能夠提供最通用的功能,如果對 VS的編輯器有些額外的需求,我們只好自己動手了,本文將介紹如何擴充文字編輯器。
AOM中編輯器相關的介面
跟以前一樣,這裡首先簡單介紹一下AOM中的相關介面、類型。
1)Documents
在預設情況下,VS會以標籤式文檔呈現開啟的各個文檔。這些文檔的集合在AOM中就是 Documents,它實現了IEnumerable介面。通過該介面,我們可以擷取當前開啟的文檔,它 的重要屬性和方法有:
Count:開啟文檔的數目;
Add():向集合中添加新的文檔;
CloseAll():關閉所有文檔,它的參數為vsSaveChanges枚舉,可提供關閉時的行為選 項,比如提示使用者進行儲存;
Item():根據索引擷取集合中的某個文檔;
Open():開啟一個文檔;
SaveAll():儲存所有文檔。
這些成員的含義是相當簡單、直白的。我們可以通過迴圈變數所有開啟的文檔,以獲 取所有文檔的資訊,對於單個文檔來說,它對應於Document介面。
2)Document
表示在VS中開啟進行編輯的文檔。它的成員較多,這裡僅介紹一下比較重要的幾個:
FullName/Path/Name:文檔的全名、所在目錄、檔案名稱;
Language:文檔的語言類型,如CSharp;
ProjectItem:擷取與文檔關聯的ProjectItem對象;
Selection:文檔中的選定內容;
Type:文檔的類型;
Activate():將焦點移至該文檔;
Close():關閉文檔;
Redo()/Undo():執行Redo/Undo操作;
Save():儲存文檔。
關於Document成員的詳細資料,請參看這裡。其中的Selection屬性非常有用,因為很 多時候我們都是先選中文檔的部分內容,再進行相應的操作。另外,在開啟的多個文檔中 ,只有一個處於活動狀態,可以使用DTE.ActiveDocument屬性來快速擷取該文檔。
在擷取文檔的引用後,下一步就可以考慮如何進行編輯了。我們得瞭解5個介面: TextSelection、TextPoint、EditPoint、VirtualPoint、TextDocument。相信在瞭解了 這些介面後,你在操作編輯器時會得心應手的。