【问题标题】:TToolbar Button with dropdown menu greyed out带有灰色下拉菜单的 TToolbar 按钮
【发布时间】:2014-11-20 08:43:28
【问题描述】:

我在让 TToolbar 按钮显示为“启用”时遇到问题

按钮有一个分配给它的动作 - 由 OnClick 事件触发

它还设置了一个下拉菜单,上面有 2 个选项,这两个选项都是启用的,并且都在单击时触发。

尽管如此,TToolbar 按钮始终保持灰色,但接受点击。

有什么建议吗?

【问题讨论】:

    标签: delphi delphi-xe6


    【解决方案1】:

    你做错了。 :-)

    使用动作时,不要使用按钮的 OnClick 事件 - 而是将代码放在动作的 OnExecute 事件中(因为这是正在执行的 - 动作 - 而不是按钮)。将操作分配给控件后,在有 TAction.OnExecute 的处理程序之前无法启用控件。

    使用动作的原因是您可以将代码放在一个地方(与动作相关的事件),然后附加到该动作的每个控件都使用该公共代码来执行相同的功能。在该单个位置编辑代码意味着附加到该操作的所有控件都会看到相同的更改。

    如果TAction.OnExecute 事件没有附加任何内容,则如果控件被选中(单击),则该控件将无事可做,因此首先没有理由启用它。

    【讨论】:

    • 另见 DisableIfNoHandler。
    • Delphi添加了OnClick,并设置为ActionOnExecute过程。
    • @DanKelly:不,当您在对象检查器中双击 OnClick 时,you 添加了 OnClick,并且 you 将其设置为ActionOnExecute 过程。 (IDE 可能已经生成了一些代码,但它是 your 操作的结果。)同样,不要那样做。 :-) 删除 OnClick 处理程序(只需删除 begin..end 之间的代码,留下一个空行,并删除任何 var 语句,然后编译。一旦为按钮创建 OnClick 事件,ActionOnExecute 在运行时不会被视为附加到按钮,因为它有一个 OnClick 事件。
    • 再一次,你做错了。重来。将 TActionManager 拖放到表单上,然后创建一个操作。在该操作的 OnExecute 事件处理程序中编写代码。添加一个 TActionToolBar,将操作放到它上面。按钮 OnClick 上什么都看不到。哦,明白了。您正在尝试使用过时的 TToolBar,而不是使用 TActionToolBar,后者是专门为与 TActionManager 一起工作而设计的。
    • 在 Object Inspector 中使用 ActionItem 的属性管理器。将CommandStyle 属性设置为csMenu。单击Items 属性,然后单击... 按钮。将下拉菜单中所需的每个项目的新操作添加到项目列表中,就像您执行任何其他操作一样。
    【解决方案2】:

    万一其他人遇到这个问题,我只是遇到了这个问题(使用 Delphi 10.2 Tokyo)。

    由于某种原因,TToolButton 上的“EnableDropdown”属性在设置为 true 时导致按钮变灰。将此属性设置为 false 似乎已经解决了我的问题(下拉菜单仍然有效)。

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 2018-07-27
      • 2018-09-16
      • 2022-12-31
      • 2019-07-04
      • 2011-03-25
      • 1970-01-01
      • 2021-12-16
      • 2010-09-19
      相关资源
      最近更新 更多