【问题标题】:Update Eclipse menu item enabled state更新 Eclipse 菜单项启用状态
【发布时间】:2011-05-21 12:40:35
【问题描述】:

我在“文件”菜单中创建了菜单项作为命令。对于这个命令,有一个实现IHandler 接口的处理程序。此处理程序包含 isEnabled 方法。我正在尝试使用此方法来启用/禁用我的菜单项,但是当我单击“文件”菜单时,该方法仅被调用一次。当点击第二次、第三次等时,即使我之前更改了页面(打开/关闭编辑器)的状态,也不会再次调用isEnabled 方法。

我该怎么办?也许这种方法不适用于控制菜单项?

【问题讨论】:

    标签: eclipse-rcp


    【解决方案1】:

    你是在继承 org.eclipse.core.commands.AbstractHandler 吗?您应该使用setBaseEnabled(boolean) 来更新处理程序的状态(这将更新您的命令)。

    只要您还触发了HandlerEvent,在您的处理程序中更改启用状态才有效。调用 setBaseEnabled(boolean) 通常更容易,它会为您触发事件。

    【讨论】:

      【解决方案2】:

      如果您尝试启用/禁用菜单,则应使用核心表达式。 我已经在这个答案中解释了如何做到这一点:

      Eclipse RCP menus & actions: Configure or code?

      你感兴趣的部分开头是:

      用于激活/停用菜单[...]

      我希望这是您正在寻找的。

      【讨论】:

      • 如果我有 MenuManager 的句柄,如何以编程方式启用/禁用菜单项?
      • @Neel 好吧,(在提到的例子中)你应该调用 CommandState.setNotLoaded() 它将变量“myapp.commands.sourceprovider.active”的值更改为 NOT_LOADED ,这反过来将是由处理程序中的条件检测到。处理程序中的条件表明,如果“myapp.commands.sourceprovider.active”不等于 PLAYING 或 PAUSED,则该按钮应处于非活动状态(因此禁用)。简而言之,使用提供程序类(此处为 CommandState)来更改触发处理程序的变量的值。
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2014-10-18
      • 1970-01-01
      • 2013-11-09
      • 2011-05-09
      • 2010-09-13
      相关资源
      最近更新 更多