【问题标题】:ActionMainMenuBar - Menu item not updating its disabled status after manually adding action itemsActionMainMenuBar - 手动添加操作项后菜单项未更新其禁用状态
【发布时间】:2013-11-09 00:15:12
【问题描述】:

使用:Delphi XE2,32 位 Windows VCL 表单应用程序

在 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 和初始操作(Visible 设置为 False)的屏幕截图:

TIA。

【问题讨论】:

    标签: delphi tactionmanager


    【解决方案1】:

    在添加您的操作项后调用 ActionMainMenuBar1.ActionClient.Items[3].CommandStyle := csMenu; 将强制重新创建命令属性,因此您的会话类别将可以访问。

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-01
      • 2023-03-06
      • 2012-12-19
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多