一个简单的编辑功能:插入日期
我创建了一个简单插入日期的功能,确切的功能是:在当前光标的位置或则当前选择文本的地方插入当前日期。这是Visual Studio .NET中已经包含了一个用宏实现此功能的例子。所以你可以看见通过宏和插件两种不同的方法实现同样的功能。这个例子非常简单,只需要你修改一个在前面列出来的那个Exec函数。通过前面章节我已经创建了一个基本插件,这个插件的名字是“TextUtil”更加确切的说是“TextUtil.Connect.TextUtil”。在Exec函数中我替换了向导自动生成的代码。
handled = true;
替换为
handled = InsertDate();
增加如下InsertData()函数,可以在Connect对象中的任何地方增加该函数。
private bool InsertData()
{
if(applicationObject.ActiveDocument!= null)
((TextSelection)applicationObject.ActiveDocument.Selection).Text
=DateTime.Now.ToString("yyy-MM-dd");
return true;
}
InsertData函数使用了System.DateTime和Sytem.String对象。关于System.String的介绍可以参看帮助。在这里我注意到在OnConnection中关于CommandBars的三行代码,这三行代码是在以后运行的过程中要在工具菜单中建立菜单项。
除了名称插件已经完成。按F5来试验插件。一个新的IDE实例运行,在这个实例中这个插件将出现在工具|外接程序管理对话框中。可以通过选中再外接程序管理对话框中最左面的复选框来加载插件。现在你可以打开任何一个文本文件,然后再Visual Studio .NET的命令窗口中输入“TextUtil.Command.TextUtil”在当前光标的位置将插入当前日期。事实上在你完成输入之前自动变异已经天填充了命令。
当你按下F5开始运行一个IDE新的实例的时候,你的插件是在调试模式下。我们可以在调试模式下发现所有异常的信息。在普通的操作中出现了任何的异常,他们都可能不可用。尽可能的得到异常的信息,那么错误的原因就会尽早的发现。
改变命令名称
向导已经为菜单命令指定了默认的名字(TextUtil)。因此这个名字是不具有特色描述的,我一会会增加更多的菜单命令、改变菜单命令名称。同时,因为我在改变命令名称的时候遇到过名称混乱的情况,所以我们必须确认我们的插件不会有相同的命令名称。
第一个改变是在OnConnection函数中调用AddNameCommand之处
Command command = commands.AddNamedCommand(addInInstance,
"InsertDate",
"Insert Current Date",
"Insert Current Date",
true, 59, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported
+(int)vsCommandStatus.vsCommandStatusEnabled);
在QuertyStatus中更改如下:
if(commandName.ToLower() == "textutil.connect.insertdate")
向导在初始运行加载之前应经注册了插件信息,但是名称的改变影响了注册信息。这就意味着在增加了插件功能的时候我们需要从新生成插件项目和安装项目。然后再运行安装程序。
图3 运行插件(原文:Running the Macro 译者:可能是错误)
现在“TextUtil.Connect.InsertDate”命令可以按照我的想法工作了(图3)。但是,他是怎么工作的呢?让我们继续往下看。