在Visual Studio.NET中使用自定義插件最大化您的生產(chǎn)力(3)
發(fā)表時(shí)間:2024-06-21 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]插件是怎么工作的?在前面章節(jié)中給你們演示的InsertDate代碼是相當(dāng)簡(jiǎn)單的,而且自動(dòng)完成功能讓人感覺(jué)不可思議。我將從對(duì)象瀏覽器開(kāi)始(Object Browser)開(kāi)始,因?yàn)樗軌蚍浅H菀椎淖屛覀儗W(xué)習(xí)對(duì)象所以他是一非常好的助手。你可以在你要查看的對(duì)象上單擊右鍵然后選擇轉(zhuǎn)到定義(Go To Def...
插件是怎么工作的?
在前面章節(jié)中給你們演示的InsertDate代碼是相當(dāng)簡(jiǎn)單的,而且自動(dòng)完成功能讓人感覺(jué)不可思議。
我將從對(duì)象瀏覽器開(kāi)始(Object Browser)開(kāi)始,因?yàn)樗軌蚍浅H菀椎淖屛覀儗W(xué)習(xí)對(duì)象所以他是一非常好的助手。你可以在你要查看的對(duì)象上單擊右鍵然后選擇轉(zhuǎn)到定義(Go To Definition)來(lái)快事的查看類(lèi)的成員。最終結(jié)果參看圖4,你可以在列出的成員中查看任何一個(gè)成員的原型,或則選擇一個(gè)成員按F1訪問(wèn)在先幫助。
圖4 對(duì)象瀏覽器
applicationObject對(duì)象描述了插件宿主(host)應(yīng)用程序,在這個(gè)例子中宿主(host)應(yīng)用程序?yàn)閂isual Studio .NET IDE。applicationObject在OnConnection方法中實(shí)現(xiàn)。在在線幫助中找到“DTE”,甚至在向?qū)ё詣?dòng)產(chǎn)生的代碼中聲明為“_DTE”類(lèi)型的變量applicationObject。在應(yīng)用程序級(jí)別你會(huì)看到她又許多有趣的成員。
其中一個(gè)成員是ActiveDocument屬性(property),它描述了當(dāng)前焦點(diǎn)的文檔(document)。這個(gè)文檔就是你要進(jìn)行InsertDate操作的文檔。在窗口焦點(diǎn)和文檔焦點(diǎn)有關(guān)系但是不同的情況下,一個(gè)非常有用的規(guī)則是,不管窗體是否有焦點(diǎn)具有焦點(diǎn)的文檔都是將要被保存的。
ActiveDocument.Selection屬性返回一個(gè)描述當(dāng)前在文檔中選擇的對(duì)象。因?yàn)樵贑#中它是一個(gè)普通對(duì)象,所以我他它強(qiáng)制類(lèi)型轉(zhuǎn)換成TextSelectioni。ActiveDocument是一個(gè)普通的類(lèi),因?yàn)閐ocument(譯者:類(lèi)似于VC++中的document類(lèi))沒(méi)有必要基于text,就好比一個(gè)窗體設(shè)計(jì)document(譯者:學(xué)過(guò)VC++的人可能比較熟悉document類(lèi)的繼承關(guān)系,不熟悉的人可以看看有關(guān)這方面的書(shū)籍)。作為最終結(jié)果Selection屬性也是一個(gè)普通的類(lèi),在這里我把它強(qiáng)制類(lèi)型轉(zhuǎn)換成類(lèi)我們?cè)诖a中實(shí)際操作的TextSelection類(lèi)型。
TextSelection描述了一個(gè)文件的視圖(view),并且這個(gè)文件的動(dòng)作和工具 選項(xiàng)中的設(shè)置還有使用的狀態(tài)一至。他提供了很多的你可能想到用于修改文件的屬性和方法,還有他可以影響使用的視圖(view),當(dāng)前選擇的內(nèi)容,插入位置。如果你曾經(jīng)錄制過(guò)宏,你可以看見(jiàn)使用TextSelection對(duì)象來(lái)捕獲內(nèi)容。
InsertDate簡(jiǎn)單的的設(shè)置了Text屬性值是當(dāng)前的日期。類(lèi)似Text一樣,所有的動(dòng)作都可以設(shè)置同類(lèi)型的值。這就意味著所有得到的內(nèi)容都要被替換,如果沒(méi)有選擇內(nèi)容那么就會(huì)在光標(biāo)的位置上替換,不過(guò)你要注意當(dāng)前的狀態(tài)是插入還是覆蓋模式。
另外一種方法是使用Insert函數(shù),這個(gè)方法允許你控制文本放置的位置和描述了一個(gè)不能重做的動(dòng)作。使用這個(gè)方法來(lái)替換Text屬性指定插入內(nèi)容的代碼如下:
((TextSelection)applicationObject.ActiveDocument.Selection).Insert(
DateTime.Now.ToString("yyyy-MM-dd"),
(int)EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToEnd);
這個(gè)vsInsertFlags指出了文本已什么方式什么位置插入的。在線幫組中忽略了vsInsertFlags的文檔,所以我在圖5中包含了這部分。
現(xiàn)在你因該理解了插件是怎么工作的了,讓我們?yōu)檫@個(gè)命令簡(jiǎn)單的作一個(gè)鍵盤(pán)邦定和增加一個(gè)菜單。
圖5 vsInsertFlags 值
vsInsertFlagsCollapseToEnd
The selection's current
contents are deleted before
performing the insertion, and
the TextSelection is left empty
at the end of the newly
inserted text.
vsInsertFlagsCollapseToStart
The selection's current
contents are deleted before
performing the insertion, and
the TextSelection is left empty
at the beginning of the newly
inserted text.
vsInsertFlagsContainNewText
The selection's current
contents are replaced with the
inserted text, and the
TextSelection is left containing
the new text.
vsInsertFlagsInsertAtStart
The inserted text is placed at
the beginning of the
TextSelection, and the
resulting TextSelection
contains both the new and
previous text.
vsInsertFlagsInsertAtEnd
The inserted text is placed at
the end of the TextSelection,
and the resulting
TextSelection contains both
the new and previous text.