迭代主菜单的项目(包括子项目)

Jac*_*ień 7 delphi iteration menu

我正在尝试迭代所有主菜单的项目.问题从子菜单项开始.像Menu.Items [i] .Items [j] .Items [k]这样的结构看起来不容易操作.有什么办法吗?


我的目标是列出所有项目标题.

RRU*_*RUZ 14

您可以使用这样的递归函数

procedure TForm1.ProcessMenu(AMenu: TMenuItem);
var
  i: integer;
begin
  for i := 0 to AMenu.Count - 1 do
  begin
    Memo1.Lines.Add(AMenu[i].Caption);
    ProcessMenu(AMenu[i]);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ProcessMenu(MainMenu1.Items);
end;
Run Code Online (Sandbox Code Playgroud)

  • +1 _我将代码减少了三分之一;)_ (7认同)

Hea*_*are 5

使用此代码:

USES Menus;

TYPE TItemArr = ARRAY OF TMenuItem;

FUNCTION AllItems(MainMenu : TMainMenu) : TItemArr;
  VAR
    I : Cardinal;

  PROCEDURE Parse(VAR Result : TItemArr ; Item : TMenuItem);
    VAR
      I : Cardinal;

    BEGIN
      SetLength(Result,SUCC(LENGTH(Result)));
      Result[HIGH(Result)]:=Item;
      FOR I:=1 TO Item.Count DO Parse(Result,Item.Items[PRED(I)])
    END;

  BEGIN
    SetLength(Result,0);
    FOR I:=1 TO MainMenu.Items.Count DO Parse(Result,MainMenu.Items[PRED(I)])
  END;
Run Code Online (Sandbox Code Playgroud)

用它作为:

VAR MI : TMenuItem;
FOR MI IN AllItems(MainMenu) DO ProcessMenuItem(MI);
Run Code Online (Sandbox Code Playgroud)