在Visual Studio.NET中使用自定义插件最大化您的生产力(三)

visual|最大化

插件是怎么工作的?

在前面章节中给你们演示的InsertDate代码是相当简单的,而且自动完成功能让人感觉不可思议。

我将从对象浏览器开始(Object Browser)开始,因为他能够非常容易的让我们学习对象所以他是一非常好的助手。你可以在你要查看的对象上单击右键然后选择转到定义(Go To Definition)来快事的查看类的成员。最终结果参看图4,你可以在列出的成员中查看任何一个成员的原型,或则选择一个成员按F1访问在先帮助。

图4 对象浏览器

applicationObject对象描述了插件宿主(host)应用程序,在这个例子中宿主(host)应用程序为Visual Studio .NET IDE。applicationObject在OnConnection方法中实现。在在线帮助中找到“DTE”,甚至在向导自动产生的代码中声明为“_DTE”类型的变量applicationObject。在应用程序级别你会看到她又许多有趣的成员。

其中一个成员是ActiveDocument属性(property),它描述了当前焦点的文档(document)。这个文档就是你要进行InsertDate操作的文档。在窗口焦点和文档焦点有关系但是不同的情况下,一个非常有用的规则是,不管窗体是否有焦点具有焦点的文档都是将要被保存的。

ActiveDocument.Selection属性返回一个描述当前在文档中选择的对象。因为在C#中它是一个普通对象,所以我他它强制类型转换成TextSelectioni。ActiveDocument是一个普通的类,因为document(译者:类似于VC++中的document类)没有必要基于text,就好比一个窗体设计document(译者:学过VC++的人可能比较熟悉document类的继承关系,不熟悉的人可以看看有关这方面的书籍)。作为最终结果Selection属性也是一个普通的类,在这里我把它强制类型转换成类我们在代码中实际操作的TextSelection类型。

TextSelection描述了一个文件的视图(view),并且这个文件的动作和工具|选项中的设置还有使用的状态一至。他提供了很多的你可能想到用于修改文件的属性和方法,还有他可以影响使用的视图(view),当前选择的内容,插入位置。如果你曾经录制过宏,你可以看见使用TextSelection对象来捕获内容。

InsertDate简单的的设置了Text属性值是当前的日期。类似Text一样,所有的动作都可以设置同类型的值。这就意味着所有得到的内容都要被替换,如果没有选择内容那么就会在光标的位置上替换,不过你要注意当前的状态是插入还是覆盖模式。

另外一种方法是使用Insert函数,这个方法允许你控制文本放置的位置和描述了一个不能重做的动作。使用这个方法来替换Text属性指定插入内容的代码如下:

((TextSelection)applicationObject.ActiveDocument.Selection).Insert(

DateTime.Now.ToString("yyyy-MM-dd"),

(int)EnvDTE.vsInsertFlags.vsInsertFlagsCollapseToEnd);

这个vsInsertFlags指出了文本已什么方式什么位置插入的。在线帮组中忽略了vsInsertFlags的文档,所以我在图5中包含了这部分。

现在你因该理解了插件是怎么工作的了,让我们为这个命令简单的作一个键盘邦定和增加一个菜单。

图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.

时间: 2016-02-06

在Visual Studio.NET中使用自定义插件最大化您的生产力(三)的相关文章

在Visual Studio.NET中使用自定义插件最大化您的生产力(一)

visual|最大化 这篇文章假设您已经熟悉C#, Visual Basic .NET和CLR 难度程度 1 2 3 摘要 对于开发者来说,不管多么强大的集成开发环境(IDE)都需要具有自定义插件的功能.基于这个原因,Visual Studio. NET IDE提供了一个可扩展的.添加方便的而且还没有数量限制的自定义插件功能.这个自定义插件可以用Visual Basic.C.C#或则其它的.NET的使用的语言来编写.这篇文章解释了如何在Visual Studio. NET中增加一个自定义插件的例

在Visual Studio.NET中使用自定义插件最大化您的生产力(二)

visual|最大化 一个简单的编辑功能:插入日期 我创建了一个简单插入日期的功能,确切的功能是:在当前光标的位置或则当前选择文本的地方插入当前日期.这是Visual Studio .NET中已经包含了一个用宏实现此功能的例子.所以你可以看见通过宏和插件两种不同的方法实现同样的功能.这个例子非常简单,只需要你修改一个在前面列出来的那个Exec函数.通过前面章节我已经创建了一个基本插件,这个插件的名字是"TextUtil"更加确切的说是"TextUtil.Connect.Tex

畅谈Visual Studio 2010中的SharePoint插件

Visual Studio 2010最大的卖点就是可扩展性.这样就可以借助.NET社区的力量基于VS构建出许多有用的工具.本文中我们将展示如何扩展VS2010的服务器资源管理器,在其中的SharePoint结点上添加一个自定义操作. SharePoint服务器资源管理器是Visual Studio 2010的一项新特性,该功能是由Visual Studio Tools for SharePoint提供的. 如果你只需要从Visual Studio中浏览SharePoint站点里的内容(网站栏,内

详解Visual Studio 2010中的扩展管理器

扩展能够为核心应用程序提供附加的功能或者自定义设置.在很多应用程序中这都是很流行的,包括流行的web浏览器IE和Firefox.微软的Office.媒体播放器.Photoshop.Eclipse.Visual Studio等等.其中有些可能比较新奇,而针对开发工具--像Eclipse和Visual Studio--的扩展让开发者的生产力得到了显著提高. Visual Studio早期的版本是构建在COM技术之上的.而Visual Studio的主要扩展方式插件是通过COM接口实现的.随着时间的变

Visual Studio 2010中的Web开发

Microsoft Visual Studio 2010 为 ASP.NET Web 应用程序的开发提供很多新的功能.这些新功能旨在帮助开发人员快速方便地创建和部署质量高且功能全的 Web 应用程序. 目前,Visual Studio 2010 支持 HTML 代码片段.利用这些代码片段,可以生成高质量的代码.Visual Studio 中附带了很多代码片段,开发人员也可以创建自己的代码片段. Visual Studio 2010 提供的另一个新功能是转换 web.config 文件,以用于部署

探秘.NET 4和Visual Studio 2010中的多核利用

如果你想利用多核机器的强大计算能力,你需要使用PLINQ(并行LINQ),任务并行库(Task Parallel Library,TPL)和Visual Studio2010中的新功能创建应用程序. 以前,如果你创建的多线程应用程序有BUG,那要跟踪起来是很麻烦的,但现在情况完全变了,感谢微软为我们带来了Microsoft Parallel Extensions for .NET(.NET并行扩展),它在.NET框架线程模型上提供了一个抽象层. 并行扩展遵循微软在COM应用程序中建立的事务管理和

在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序

原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim Nakashima.Hani Atassi 和 Danny Thorpe 将应用程序或服务部署到 Microsoft 云服务平台 Windows Azure 的原因有很多.例如,只为使用的内容付费从而可降低操作和硬件成本.构建几乎能无限缩放的应用程序.巨大的存储容量.地理位置等等,不胜枚举. 只有

如何在 Visual Studio 2012 中关联 BI 项目

原文 http://www.cnblogs.com/biwork/archive/2013/05/12/BI_VS2012.html 新安装了 SQL Server 2012 和 Visual Studio 2012. 准备在 VS 2012 中创建一个 BI 项目, 但是发现找不到这一项. 后来想起来在装完 SQL Server 2012 以后, 以前的 BIDS 工具的名称也变成了 SQL Server Data Tools (SSDT), 但是实际上使用的还是 Visual Studio

Visual Studio 2010 中的代码约定设置

软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要查看我上个月发表的文章 (msdn.microsoft.com/magazine/gg983479). 代码约定是 .NET Framework 4 的一部分,但同样依赖于 Visual Studio 2010 中的一些功能,例如运行时工具.与 MSBuild 集成以及"项目属性"框中的属