但是本人从来没写过插件,没有一点感觉,上网google一下发现如下资源:
- Visual Studio 2005 插件编程(代码行数统计插件)
- 用Visual Studio 2005 开发VB.NET-C#语言转换插件
- VS 2005 Add-in开发随笔 以及Explorer - A Visual Studio 2005 add-in which interacts with Windows Explorer
- 还有MysticBoy这位老兄,但是全是vb的,本人不懂vb
上面这些资源确实不错,至少带我入门了,谢谢上面资料的作者,但是仅仅通过这些资源要想写一个复杂的插件也是不容易的首先我就没找到要在标准工具栏上加一个自己的按钮,并在点击时执行对应的命令,在仔细学习了上面的资料后也是找不到头绪,查msdn也没详细的解释,于是就开始试,试着试着就有点意思了;
其实很简单,一下是简单步骤:
- 使用工程向导先建立工程,至于怎么建就可以看上面的资料了,这里忽略;
- 清除类Connect.cs方法OnConnection原有的代码,并加入如下代码
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
CommandBars cmdBars = (CommandBars)(_applicationObject.DTE.CommandBars);
if (connectMode == ext_ConnectMode.ext_cm_Startup)
{
Commands2 commands = ((Commands2)(_applicationObject.Commands));
CommandBar standardBarToolbar = cmdBars[ " Standard " ];
object [] contextGUIDS = new object [] { };
try
{
Command btnCommandFromTarget = commands.AddNamedCommand2(_addInInstance,
" MyTest " , " TestText " ,
" TestTip " , true , 41 ,
ref contextGUIDS,
(( int )(vsCommandStatus.vsCommandStatusSupported)) +
(( int )(vsCommandStatus.vsCommandStatusEnabled)),
(( int )(vsCommandStyle.vsCommandStylePictAndText)),
vsCommandControlType.vsCommandControlTypeButton);
btnCommandFromTarget.AddControl(standardBarToolbar,
standardBarToolbar.Controls.Count + 1 );
}
catch (Exception e)
{
global::System.Windows.Forms.MessageBox.Show(e.Message);
}
} - 在OnDisconnection方法中加入,注意这句代码很危险,在正式写插件的时候要好好考虑
standardBarToolbar.Controls[standardBarToolbar.Controls.Count].Delete( null );
- 在QueryStatus中用下面的代码替换原有代码,其实就改了"MyAddin2.Connect.MyTest"
if (neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
if (commandName == " MyAddin2.Connect.MyTest " )
{
status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported |
vsCommandStatus.vsCommandStatusEnabled;
return ;
}
} - 实现Exec就ok了,用下面的代码替换原有代码,也就是改了"MyAddin2.Connect.MyTest"加了一个命令处理过程,这里仅仅是一个box框
handled = false ;
if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if (commandName == " MyAddin2.Connect.MyTest " )
{
System.Windows.Forms.MessageBox.Show( " 点击了测试按钮! " );
handled = true ;
return ;
}
} - 运行,看效果
另外,顺便问个很土的问题:下图框住的文件手工如何加上去?以前加过现在忘了,莫非还要手工改工程文件代码?请知道的告之,谢谢