通过DTE在VS扩展中添加菜单项;t启动Click处理程序

本文关键字:启动 Click 程序 处理 菜单项 添加 DTE VS 扩展 通过 | 更新日期: 2023-09-27 17:57:34

我正在尝试用VS Package(Extension)中的菜单项动态填充Solution右键单击菜单。

我有一个名为"MyMenuName"的扩展菜单,我正在那里添加菜单项。

这是我使用的代码:

        DTE2 dte = GetService(typeof (DTE)) as DTE2;
        CommandBars cmdBars = dte.CommandBars as CommandBars;
        CommandBar owner = cmdBars["MyMenuName"];
        CommandBarControl ctl1 = owner.Controls.Add(
            MsoControlType.msoControlButton, 1, string.Empty, 1, true);
        ctl1.Caption = "caption";
        ctl1.Enabled = true;
        //register on the Click event of the
        //button menu item
        CommandBarEvents buttonMenuItemHandler = (CommandBarEvents)dte.DTE.Events.CommandBarEvents[ctl1];
        buttonMenuItemHandler.Click += buttonMenuItemHandler_Click;

菜单项添加成功,但它的Click处理程序永远不会执行。有什么想法吗?

编辑:我在这里挖掘了一些代码:https://netrepo.svn.codeplex.com/svn/trunk/AssemblyFactoryAddin/AssemblyFactoryAddin/GUIButton.cs看来我的代码应该是正确的(假设他们的代码有效)

通过DTE在VS扩展中添加菜单项;t启动Click处理程序

与其使用CommandBarControl,不如使用CommandBarButton。例如:

var button = (CommandBarButton)owner.Controls.Add(MsoControlType.msoControlButton);
button.Caption = "caption";
button.Enabled = true;
button.Click += OnButtonClick;`

这将解决问题。