CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

动态创建菜单

楼主freeman_world()2002-11-25 16:00:28 在 Delphi / VCL组件开发及应用 提问

我动态创建了一个菜单,现在我想把它删除,重新再创建(运行当中随时要根据需要动态创建不同的子菜单),当我删除完重建时老告诉我我所创建的子菜单的文件名存在.  
  我想问的是如何删除子菜单(包括删除它的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

相关问题

  • 动态创建菜单???
  • 动态 菜单 创建
  • 如何动态创建菜单项?
  • 如何用表创建动态菜单
  • 动态创建菜单的问题!
  • 如何动态创建弹出菜单
  • 怎样动态创建菜单
  • 求助:动态菜单创建
  • 求动态创建菜单的方法
  • 如何动态创建菜单项

关键词

  • 代码
  • addsubitem
  • 菜单
  • 删除
  • mi
  • 动态
  • 创建
  • caption
  • items

得分解答快速导航

  • 帖主:freeman_world
  • wengj
  • d983074
  • keenleung

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo