【发布时间】:2011-05-16 01:43:32
【问题描述】:
我正在尝试动态添加操作项,我可以添加该项目并且当我这样做时它可以工作:
HostActionItem := ActionManager.ActionBars[0].Items[0].Items[2];
NewItem := HostAction.Items.Add;
NewItem.Action := MyActionToPerform;
NewItem.Caption := Description;
NewItem.ImageIndex := 1;
NewItem.Tag := 13;
但是,当动作 Execute 方法触发时,我尝试从 Sender 对象中获取 ActionComponent,如下所示:
if (Sender is TAction) then
tag := (Sender As TAction).ActionComponent.Tag;
但是 ActionComponent 总是为零。为什么 ActionComponent 没有被初始化?
【问题讨论】:
-
“为什么 ActionComponent 没有被初始化?” 似乎是这里真正的问题,而不是如何向动作管理器添加动作。顺便说一句,尝试使用操作
Tag,如果您需要为同一操作使用不同的标签,那么您可能需要另一个操作,而不是创建"god" event handler。 -
抱歉,我的措辞使问题混淆了。本质上你是对的。我正在寻找一种具有动态操作的方法,因此需要一个相当灵活的事件处理程序。您是否建议也动态创建底层操作,或者有更好的方法来做到这一点?
标签: delphi delphi-2010 taction tactionmanager