动态创建菜单
我动态创建了一个菜单,现在我想把它删除,重新再创建(运行当中随时要根据需要动态创建不同的子菜单),当我删除完重建时老告诉我我所创建的子菜单的文件名存在.
我想问的是如何删除子菜单(包括删除它的name)
创建程序代码:
for i:=0 to LineNum-1 do
begin
addSubItem:= TMenuItem.Create(Self);
addSubItem.Name := 'NDevice'+inttostr(i);
addSubItem.Caption := LineName[i]; //
mi.Add(addSubItem);
addSubItem.Hint :=LineName[i];
addSubItem.OnClick:=ValueClick; // 步骤2的MyClick(),自定义菜单要响应的事件
//addsubsubitem(addSubItem,i);
managevaluebydevicedevicenum:=i;
end;
删除代码:
mi:=mainmenu1.Items[0];
j:=mi.Count;
if j >0 then
while j >0 do
begin
s:= mi.Items[0].Caption ;
s1:=mi.Items[0].Name ;
mi.Remove(mi.Items[0]);
//mi.Delete(0);
s:=mi.Caption ;
s1:=mi.Name ;
dec(j);
end;
每次重建时 它都提示 NDevice0(子菜单的文件名)已经存在,
问题点数:100、回复次数:6Top
1 楼wengj(做了两年的软件,想换个行业)回复于 2002-11-25 16:16:01 得分 30
在删除代码加几行(在mi.Remove(mi.Items[0])之前)
var
miDel: TMenuItem;
miDel := mi.Items[0];
miDel.Free;Top
2 楼freeman_world()回复于 2002-11-25 16:33:34 得分 0
我试过了
它提示midel (list out of index )
这是因为midel底下并没有子菜单了(我这里只有一级子菜单)Top
3 楼d983074(d983074)回复于 2002-11-25 16:50:35 得分 30
用TMenuItem的Count,items[i]属性来获得子菜单,然后FreeTop
4 楼keenleung(Sword Master)回复于 2002-11-25 17:11:27 得分 40
既然有名字,就用名字作为特征来删除,动态创建的组件都给个特殊的前缀,无差别删除,很爽的!呵呵...
for i:=1 to Self.ComponentCount do
begin
if Copy(Self.Components[i].Name,1,7)='NDevice' then
begin
Self.Components[i].Free;
i := i-1;
end;
end;Top
5 楼freeman_world()回复于 2002-11-25 17:16:40 得分 0
okTop
6 楼wengj(做了两年的软件,想换个行业)回复于 2002-11-26 09:20:31 得分 0
我写错了
在删除代码加几行
var
miDel: TMenuItem;
...
miDel := mi.Items[0];//在mi.Remove(mi.Items[0])之前
miDel.Free;//在mi.Remove(mi.Items[0])之后
...
Top




