我的程序在运行时创建操作菜单项,每个项的标题设置为数据库查询返回的值。
所有项目的OnExecute
程序都相同。
当我点击某个项目时,我想获取要在OnExecute
程序中使用的项目标题。
我尝试了以下内容(类似于TMenuItem
的弹出式菜单):
sCaption := TActionClientItem(Sender).Caption;
但是,这总是返回一个空字符串。
我搜索过网络和Delphi帮助无济于事。我知道Caption
是已发布的属性,但公共属性Index
也失败。
我认为我在这里做错了什么,但无法弄清楚是什么。
答案 0 :(得分:0)
提供的信息不是那么详细,但我想你所描述的OnExecute程序是来自TActionManager中包含的TAction的事件。
问题是OnExecute事件的发件人是刚刚点击它的TAction!因此,当您将TActionClientItem强制转换为发件人时
TActionClientItem(Sender)
它什么也没给你。
快速解决方案将首先创建TAction,给他们您想要的标题,然后将这些TA分配给您的TActionClientItem。他们将自动获得指定操作的标题。
actionClientItem1.Action := Action1;
然后你会得到关于事件的标题
sCaption := TAction(Sender).Caption;
答案 1 :(得分:0)
为每个项目创建一个Action的建议答案的问题是我希望对许多项目使用相同的操作(由数据库查询计数确定的数字)。然后,该操作将由标题的值修改,该值是数据库查询的每条记录的值。
但是,有人向我建议了以下答案。我测试了这个并且它有效:
"如果项目在TActionMainMenuBar组件上,那么您可以执行以下操作:
type
TCustomActionMenuBarAccess = class(TCustomActionMenuBar);
在Action Execute中,您可以执行以下操作:
if TCustomActionMenuBarAccess(ActionMainMenuBar1).FSelectedItem <> nil then
ShowMessage('Selected Item: ' + TCustomActionMenuBarAccess(ActionMainMenuBar1).FSelectedItem.Caption);
其中ActionMainMenuBar1是表单上TActionMainMenuBar组件的名称。
如果项目是在工具栏上创建的,那么您可以使用TAction(发件人).ActionComponent属性,因为TAction在这些情况下是发件人。&#34;