我在工具栏上有几个按钮,其中样式定义为tbsDropDown,并指定了弹出菜单。
在显示菜单之前,我需要检查数据库中是否有任何记录。我添加了btnFilter.CheckMenuDropDown;按钮的主要部分,所以我可以在那里检查,但“向下箭头”按钮显示弹出窗口。我需要用“BeforePopup”事件进行干预。
有什么建议吗?
由于
答案 0 :(得分:2)
首先,TToolButton.CheckMenuDropDown
是一个常规下拉菜单的例程,但是当它不能时返回False。
我了解您要在de数据集中没有记录时禁用下拉菜单。
可能的解决方案:
PopupMenu
属性设置为nil),反之亦然。这最好通过将动作附加到按钮来完成。设置TToolButton
班级并覆盖CheckMenuDown
:
type
TToolButton = class(ComCtrls.TToolButton)
private
FCanDropDown: Boolean;
public
function CheckMenuDropdown: Boolean; override;
property CanDropDown: Boolean read FCanDropDown write FCanDropDown;
end;
function TToolButton.CheckMenuDropdown: Boolean;
begin
Result := FCanDropDown and (inherited CheckMenuDropdown);
end;
但这不是设计时解决方案,您必须在运行时相应地设置CanDropDown
属性。
CanDropDown
属性。答案 1 :(得分:1)
在菜单出现之前,其OnPopup
事件将触发。这使您有机会在最终显示之前修改菜单的内容。