把 addsubitem.visible:=true; 去掉.

解决方案 »

  1.   

    当然不对了啊
    adsf是那里来的啊
      

  2.   

     adsf.add(addsubitem);//*********出错处*****************
    改为
    s.Items.Add(addsubitem);
      

  3.   

    即使这样,你的这段程序还不有错误的啊,不能显示啊
    你应将s先加到一个菜单上啊
    var
      s:TMainMenu;
      addsubitem:TMenuItem;
      submenuitemsource:Tstrings;
      i:integer;
    begin
      s:=Tmainmenu.create(self);
      s.name:='adsf';
     // s.Caption :='adsf';
     // mainmenu1.Items.Insert(1,s);
      submenuitemsource:=Tstringlist.create;
      submenuitemsource.add('delphi');
      submenuitemsource.add('vb');
      submenuitemsource.add('vc++');
      submenuitemsource.add('c++builder');
      submenuitemsource.add('java');
        for i:=0 to 4 do
          begin
          addsubitem:=Tmenuitem.create(self);
          addsubitem.name:='b'+inttostr(I);
          addsubitem.caption:=submenuitemsource[i];
           s.Items.Insert(i,addsubitem);      end;
    end;
      

  4.   

    是啊,按你那样改还不能动态添加进去,先把s加到菜单上一定好使,不过就不完全是动态添加了。我又把那句话改为Tmenuitem(s).Add(addsubitem)不过又出现'地址错误'!
      

  5.   

    to lizhenjia(暴雪)
    你原来有没有菜单啊,
    var
      s:TMainMenu;//如果原来有菜单s为tmenuitem,否则为tmainmenu  addsubitem:TMenuItem;
      submenuitemsource:Tstrings;
      i:integer;
    begin
      s:=Tmainmenu.create(self);//这里根据声明变化
      s.name:='adsf';
    //***************
    // mainmenu1.Items.Insert(1,s);//如果原来有菜单,则去掉注释
      submenuitemsource:=Tstringlist.create;
      submenuitemsource.add('delphi');
      submenuitemsource.add('vb');
      submenuitemsource.add('vc++');
      submenuitemsource.add('c++builder');
      submenuitemsource.add('java');
        for i:=0 to 4 do
          begin
          addsubitem:=Tmenuitem.create(self);
          addsubitem.name:='b'+inttostr(I);
          addsubitem.caption:=submenuitemsource[i];
          s.Items.Insert(i,addsubitem);
          end;
    end; 
    你不信的话,你新建一个application试试,绝对没有问题