急急!!!如何动态删除子菜单 ( 积分: 50 )

  • 主题发起人 主题发起人 hoyaxun
  • 开始时间 开始时间
H

hoyaxun

Unregistered / Unconfirmed
GUEST, unregistred user!
ParkDesign是一个菜单的name,我动态的为它创建了几个子菜单,现在我想动态的删去,
ParkDesign.Delete(i);想用这个方法,可是当i等于0时,parkdesign本身就给删了,这个删子菜单要怎么搞啊 :
我用了两种方法如下:都不行,请高手指教
代码:
for I:=0 to ParkDesign.Items[0].Count-1 do
      begin
     ParkDesign.Items[0].Delete(0);
      end;
     ParkDesign.Free;///一种方法
    //////////
第二种方法  
     for i:= ParkDesign.Items[0].Count-1 downto 0 do
      begin
      ParkDesign.Items[0].Delete(i);
      end;
      ParkDesign.Free;
 
ParkDesign是一个菜单的name,我动态的为它创建了几个子菜单,现在我想动态的删去,
ParkDesign.Delete(i);想用这个方法,可是当i等于0时,parkdesign本身就给删了,这个删子菜单要怎么搞啊 :
我用了两种方法如下:都不行,请高手指教
代码:
for I:=0 to ParkDesign.Items[0].Count-1 do
      begin
     ParkDesign.Items[0].Delete(0);
      end;
     ParkDesign.Free;///一种方法
    //////////
第二种方法  
     for i:= ParkDesign.Items[0].Count-1 downto 0 do
      begin
      ParkDesign.Items[0].Delete(i);
      end;
      ParkDesign.Free;
 
for i:= ParkDesign.Items.Count-1 downto 0 do
begin
ParkDesign.Items.free;
end;
 
删parkdesign的原因不应该是循环语句的问题,而是你用了parkdesign.Free直接释放了该菜单项(你可以不要任何for语句只用parkdesign.Free试试,你会发现菜单基parkdesign没了.我把你的第二种方案略作了改动,不知能否达到兄弟的要求:
for i:= ParkDesign.Items[0].Count-1 downto 1 do
begin
ParkDesign.Items[0].Delete(i);
end;
// mainMenu1.Free;{此句不要}
 
to meyeth2004,hhjjhhjj 大哥,你的方法我早已试过,什么都删不掉

,
 
我对我原来的做了这样的改动:
procedure Tmainf.DeleteMenu;
var i :integer;
//d: Tmenuitem;
begin
for i:= ParkDesign.Items[0].Count-1 downto 0 do
begin
ParkDesign.Items[0].Delete(i);
end;
ParkDesign.items[0].free;

end;
我在form上放一个button,它的事件是执行这个过程,
假设程序执行可以得到两个子菜单,我按一下button,可以删除第一个,按两下可以删除第二个,按三下,报错,说
list index out of bounds(0) ;
可是总的来说,还是我想要的,请高手指教! 急啊
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
Var P: TPoint;
Item : TmenuItem;
I: Integer;
begin {动态生成菜单 }
for I :=PopupMenu1.Items.Count - 1 downto 0 do //清除菜单项
PopupMenu1.Items.Free;

For I := 0 To Screen.Imes.Count - 1 Do
Begin
Item := TmenuItem.Create(Self);
Item.Caption := Screen.Imes.Strings;
PopupMenu1.Items.Add(Item);
Item.OnClick := Menuclick;
End;
GetCursorPos(P); //显示菜单
Popupmenu1.Popup(P.x,P.y);
 
var
p: TMainMenu;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if p.Items.Count=0 then exit;
for i:=p.Items[0].Count-1 downto 0 do
begin
p.Items[0].Delete(i);
end;
p.Items[0].Free ;
end;
 
to hhjjhhjj 大哥
非常感谢你的方法,可是我的是Tmainmenu,不是tpopumenu啊!
 

Similar threads

D
回复
0
查看
866
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
750
import
I
后退
顶部