【问题标题】:How to disable menu, sub-menu in ActionMainMenuBar?如何在 ActionMainMenuBar 中禁用菜单、子菜单?
【发布时间】:2013-07-29 06:38:24
【问题描述】:

使用:Delphi XE3、VCL Forms 应用程序

我在 ActionMainMenuBar 中有一个包含子菜单的菜单。我如何通过代码:

  1. 禁用菜单
  2. 禁用子菜单

【问题讨论】:

  • 您要禁用父项,还是禁用父项中包含的所有项?
  • 禁用任何项目的关联操作组件。
  • @DavidHeffernan:我需要禁用父项。
  • 我不知道该怎么做,因为我找不到任何方法来引用该父项
  • 我在之前的评论中发布了一个解释如何做的答案。

标签: delphi tactionmanager


【解决方案1】:
  1. 为每个要启用禁用的菜单/子菜单创建一个“TAction”。不要将它们分配到任何类别。

  2. 为这些操作创建一个“OnExecute”事件处理程序,以便启用这些操作。您不必在处理程序中添加任何代码,注释 ('//') 足以让 IDE 不删除处理程序。

  3. 从表单设计器中选择代表菜单/子菜单的“TActionClient”,点击该项即可。

  4. 在对象检查器中将其中一项操作分配给其“Action”属性。

  5. 在运行时启用/禁用与代表菜单/子菜单的“TActionClient”关联的操作,以便相应地启用/禁用菜单/子菜单。

【讨论】:

    【解决方案2】:

    通过使用菜单的“启用”属性?或作为子菜单起点的菜单项...

    【讨论】:

    • 没有启用的属性...我正在从 DevExpress VCL dxBarManager(*其中菜单和子菜单项确实具有启用的属性)移植到标准的 VCL ActionManager 和 ActionMainMenuBar。跨度>
    • 这很奇怪,你没有在 ActionManager 中添加“Actions”吗?这些已启用属性。 ActionMainMenuBar 本身也有一个 enabled 属性(如果你想禁用完整菜单)
    • ActionMainMenuBar 上的菜单或子菜单是通过将Action Category 组拖到ActionMainMenuBar 上来创建的。由于(菜单或子菜单)它不是 TAction,因此它不具有 Enabled 属性。我的问题与是否有人找到解决方法或破解方法有关。
    【解决方案3】:

    如果您知道该类别的顶级菜单项的索引,则实际上可以在运行时禁用它(无论如何在 Delphi 7 中):

    ActionMainMenuBar.ActionControls[2].Enabled := False;
    

    ActionControls[2] 将是显示为顶级菜单项的类别(在将类别从 ActionManager 拖到 ActionMainMenuBar 之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 2011-10-27
      • 2013-10-03
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多