使用菜单项没有更新其禁用状态:德尔福XE2,32位Windows VCL窗体应用程序ActionMainMenuBar后手动添加行动项目
在ActionManager,我已经添加了一个动作,并指定类别名称。然后将ActionManager中的类别拖放到表单上的ActionMainMenuBar中。我这样做了在ActionMainMenuBar上创建菜单项。因为我打算通过代码手动创建和添加动作,并且没有真正用于“第一”动作,所以我通过设置Visbile := False
来隐藏它。
但是,在运行时,即使在编程创建操作并将它们添加到菜单后,菜单仍处于禁用状态 - 这是不期望的,因为添加的操作已启用且具有有效的OnExecute事件处理程序。
我的问题是如何刷新菜单项,以便在添加一个或多个操作项(子菜单项)后启用它?
在代码中,我有这样的:
// Create menu for each session in the Session menu
// eg. Session 1, Session 2, Session 3 etc.
var
p: Integer;
s: String;
begin
// this code executes a number of times ie in a loop
p := Pos(' ', s);
a := TAction.Create(actMgr);
a.Category := 'Session';
a.Name := 'actSession' + Copy(s, p + 1, Length(s) - p);
a.Caption := 'Session ' + Copy(s, p + 1, Length(s) - p);
a.Enabled := True;
a.OnExecute := actSessionExecute;
p := ActionMainMenuBar1.ActionClient.Items[3].Items.Count - 1;
actMgr.AddAction(a, ActionMainMenuBar1.ActionClient.Items[3].Items[p]);
end;
procedure TfMain.actSessionExecute(Sender: TObject);
begin
showmessage(TAction(Sender).Name);
end;
这里是ActionMainMenuBar,所述ActionManager和初始动作(其具有可见设置为false)的屏幕捕获,在设计模式:
TIA。