VS 2005 Add-in开发随笔

 最近在改进 NBear的EntityDesignToEntityVsPlugin,给EntityDesignToEntityVsPlugin增加右键菜单功能,在选择EntryDesign项目时,点击右键时弹出相应的菜单,通过点击菜单项触发项目编译并根据实体设计类生成相应的实体类代码,在这里给大家分享一段在VS 2005 Add-in中实现右键菜单的代码:    
   
public   void  OnConnection( object  application, ext_ConnectMode connectMode,  object  addInInst,  ref  Array custom)
        {
            _applicationObject 
=  (DTE2)application;
            _addInInstance 
=  (AddIn)addInInst;
            CommandBars cmdBars 
=  (CommandBars)(_applicationObject.DTE.CommandBars);
            CommandBar vsBarProject 
=  cmdBars[ " Project " ];

            CommandBarPopup menu 
=  vsBarProject.Controls.Add(MsoControlType.msoControlPopup, Missing.Value, Missing.Value,  1 true as  CommandBarPopup;
            menu.Caption 
=   " DemoAddIn " ;
            menu.TooltipText 
=   "" ;

            CommandBarControl menuItem 
=  menu.Controls.Add(MsoControlType.msoControlButton,  1 "" 1 true );
            menuItem.Tag 
=   " BuildTest " ;
            menuItem.Caption 
=   " BuildTest " ;
            menuItem.TooltipText 
=   " BuildTest " ;
            menuItemHandler 
=  (CommandBarEvents)_applicationObject.DTE.Events.get_CommandBarEvents(menuItem);
            menuItemHandler.Click 
+=   new  _dispCommandBarControlEvents_ClickEventHandler(MenuItem_Click);   
            
        }

        
private   void  MenuItem_Click( object  commandBarControl,  ref   bool  handled,  ref   bool  cancelDefault)
        {
            _applicationObject.ExecuteCommand(
" Build.BuildSelection " "" ); 
        }

        
public   void  OnDisconnection(ext_DisconnectMode disconnectMode,  ref  Array custom)
        {
            CommandBars cmdBars 
=  (CommandBars)(_applicationObject.DTE.CommandBars);
            CommandBar vsBarProject 
=  cmdBars[ " Project " ];
            vsBarProject.Controls[
" DemoAddIn " ].Delete( null );
        }

上面代码实现的功能是当你在VS 2005中选择一个项目,点击右键出现一个DemoAddin的菜单,选择该菜单中的BuildTest菜单项,会调用编译命令编译当前项目。
在开发时,遇到了这样的问题:
开始时,把menuItemHandler定义局部变量,点击BuildTest菜单项时,有时不执行MenuItem_Click方法,有时第一次点击时执行,但再点击就不执行。
后来把menuItemHandler定义为类的成员变量才解决问题,具体原因目前还不清楚。

完整代码下载: http://files.cnblogs.com/dudu/DemoAddin.rar
如果你想手动添加上面的代码,Visual Studio 2005提供了Visual Studio Add-in模板,在新建项目时选择Other Project Types>Extensibility>Visual Studio Add-in,新建一个Visual Studio Add-in项目,将上面的代码添加到Connect类中。
编译后,将项目文件夹中的DemoAddin.AddIn及DemoAddin.dll复制到VS 2005的Addins文件夹中(默认在“我的文档/Visual Studio 2005/Addins”),然后打开VS 2005,在Tools>Add-in Manager中启用该Add-In,如果想默认启用该Add-in,可以在DemoAddin.AddIn文件中将LoadBehavior改为1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值