如题: 代码如下,那位帮我看看
    while MainMenu1.Items.Count>0 do
    begin
      delMainMenu1(MainMenu1.Items.Items[0]);
      MainMenu1.Items.Delete(0);
    end;procedure delMainMenu1(v_menu: TMenuItem);
begin
  while v_menu.Count>0 do
  begin
    if v_menu.Items[0].Count>0 then
       delMainMenu1(v_menu.Items[0]);
    v_menu.Delete(0);  end;
end;

解决方案 »

  1.   

    删除时要从后往前删
    for i := MainMenu1.Items.Count - 1 downto 0 do
    beginend;
      

  2.   

    这样写 看看  while v_menu.Count>0 do 
      begin 
        if v_menu.Items[0].Count>0 then 
          delMainMenu1(v_menu.Items[0]);     
      end; 
    v_menu.Delete(0); 
      

  3.   


    //删除时要从后往前删 
    for i:=MainMenu1.Items.Count -1 downto 0 do 
    begin 
      delMainMenu1(MainMenu1.Items.Items[i]); 
      MainMenu1.Items.Delete(i); 
    end; procedure delMainMenu1(v_menu: TMenuItem); 
    var i:integer;
    begin 
      //删除时要从后往前删 
      for i:= v_menu.count -1 downto 0 do 
      begin 
        if v_menu.Items[i].Count>0 then 
          delMainMenu1(v_menu.Items[i]); 
        v_menu.Delete(i); 
      end; 
    end;
      

  4.   

    想要从前边开始删的话,加个LIST管理
    要不就从后边开始删, 从后边开始删比从前边开始删效率高很多 
      

  5.   

    看看这样行不行。procedure delMainMenu1(v_menu: TMenuItem);
    var
     n :integer;
    begin
      n := v_menu.Count;
      while n>0 do
      begin
        if v_menu.Items[0].Count>0 then
          delMainMenu1(v_menu.Items[0]);
        v_menu.Delete(0);
        n := v_menu.Count;
      end;
    end;