3

我有一个带有子菜单的 PopupMenu,一次只能检查一项。GroupIndex据我尝试,并且RadioItem属性在相应的子菜单之外不起作用。

我找到了这段代码来检查 PopupMenu 及其直接子组件,但我没有任何运气来创建这样的弹出窗口。我需要一个快速的解决方案——PopupMenu 有 4x14 条目,总是遍历所有菜单和子条目,这不是最好的解决方案,我想。

是否有一个我缺少的简单属性,或者迭代的艰难路径是我唯一的选择?

4

2 回答 2

8

将所有 56 项作为操作添加到一个ActionList 并赋予所有GroupIndex属性相同的值。

现在,以任何树状方式添加菜单项、子菜单和子子菜单,并将它们中的每一个链接到一个动作。选中一个菜单项,无论位于何处,都会自动取消选中所有其他菜单项。

瞧!

于 2012-06-20T20:28:05.797 回答
2

NGLN 的回答更好,但如果你真的不想或不喜欢使用 ActionList,那么这个例程也可以:

procedure CheckMenuItem(Item: TMenuItem);

  procedure UncheckMenu(Menu: TMenuItem; GroupIndex: Byte);
  var
    I: Integer;
  begin
    if Menu.RadioItem and (Menu.GroupIndex = GroupIndex) then
      Menu.Checked := False;
    for I := 0 to Menu.Count - 1 do
      UncheckMenu(Menu[I], GroupIndex);
  end;

begin
  if (not Item.Checked) and Item.RadioItem and (Item.GroupIndex <> 0) then
  begin
    UncheckMenu(Item.GetParentMenu.Items, Item.GroupIndex);
    Item.Checked := True;
  end;
end;
于 2012-06-20T20:57:16.027 回答