【问题标题】:Visual Studio Add-in. How to disable menu itemVisual Studio 加载项。如何禁用菜单项
【发布时间】:2013-11-25 15:38:26
【问题描述】:

我正在为 VS 2012 编写 C# 插件。 我想在工具菜单中添加一个菜单项。我希望在 Studio 启动时禁用此菜单项,并根据解决方案/项目是否加载而启用或禁用。

我过去可以通过处理 QueryStatus 方法并设置(或不设置) 适当时将状态设置为 vsCommandStatus.vsCommandStatusEnabled。 问题是,在我单击菜单“工具”之前,由于某种原因不再调用 QueryStatus,因此我无法禁用我的菜单项。 有人可以帮忙吗?

我通过处理 OnConnection 连接到我的插件

if(connectMode == ext_ConnectMode.ext_cm_UISetup)
{
........
}

我的插件 xml 看起来像

<LoadBehavior>1</LoadBehavior>
<CommandPreload>1</CommandPreload>
<CommandLineSafe>0</CommandLineSafe>

【问题讨论】:

    标签: c# visual-studio-2012 add-in extensibility


    【解决方案1】:

    在菜单项即将显示之前不会调用QueryStatus,但这应该不是问题,因为用户在显示菜单项之前无法看到您的菜单项已被禁用。如果您担心用户可能会使用热键来执行命令,那么只需检查该命令是否也可以在您的 Execute 方法中使用。

    【讨论】:

      【解决方案2】:

      UISetup 也有类似的问题:Social.MSDN: Visual Studio no longer sends ext_cm_UISetup

      请注意,ext_ConnectMode.ext_cm_UISetup 在计算机上加载项的整个生命周期中只触发一次,也就是说,每次加载加载项时都不会触发它。标志 ext_ConnectMode.ext_cm_UISetup 旨在只创建一次永久的永久用户界面。

      当您的加载项未加载时,您无法通过QueryStatus 管理您的菜单项。

      关于UISetupMZ-Tools HOWTO: Controlling the state of command in a Visual Studio add-in

      对于这种具有永久用户界面的加载项,因为您 将希望命令的相同状态与是否 加载项是否加载,您必须确保您的逻辑 AddNamedCommand 调用中的 ContextUIGUIDs / vsCommandDisabledFlagsValue 参数和你的逻辑 QueryStatus 方法相同。

      所以我认为你应该使用非永久按钮:

      if(connectMode == ext_ConnectMode.ext_cm_AfterStartup || connectMode == ext_ConnectMode.ext_cm_Startup)
      {
        ...
      }
      

      或者您可以正确设置UIContext。未加载加载项时不应调用查询状态,可能会更正。

      如果您创建了非永久按钮,它们将在加载项加载时以正确的状态显示,那么您应该删除它们。我以前使用过这个解决方案。

      此解决方案会导致您在加载项卸载后在特殊情况下留下几个垃圾按钮。我找不到始终清洁它们的有效解决方案。但可以手动删除它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 2013-06-29
        • 2013-10-06
        相关资源
        最近更新 更多