原来有一个菜单原型PopupMenu1
我想在菜单上动态增加一些不顶项的子项
所以用动态数组
sMenuItem:array of TMenuItem;
然后给它设置长度(从数据库中取出记录个数)setLength(sMenuItem,记录个数);
然后把它添加到Popupmenu1成功。
但是我想再创建一次动态的菜单,就会出现错误,错误提示:不能创建两次菜单。
那我要怎么样才能,动态创建无数次的菜单呢?
类似联众或QQ的游戏,就是右键点一下改房间图标,菜单创建出房间里用户的姓名。信息等。
注释部分本来想消除创建部分,可以没有效果,还是提示不能创建第二次。 
--下面是部分源代码---用ListView的SelectItem事件。。
procedure TfrmMainForm.ListViewSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var i,s,t:integer;
begin
  if Selected=true then begin
    GuestsDataSet.Close;
    GuestsDataSet.CommandText:='select * from AllGuests where RoomNO='''+Item.Caption+'''';
    LKGrid.DataSource:=DataSource1;
    GuestsDataSet.Open;
    //
    //for t:=3 to PopupMenu1.Items[2].Count-1 do begin
    //  PopupMenu1.Items[2].Items[t].Destroy;
    //end;
    RoomDataSet.CommandText:='select * from AllGuests where RoomNo='''+Item.Caption+'''';
    RoomDataSet.Open;
    if RoomDataSet.RecordCount>0 then begin
      SetLength(sMenuItem,RoomDataSet.RecordCount);
      for i:=low(sMenuItem) to High(sMenuItem) do begin
        sMenuItem[i]:=TMenuItem.Create(self);
        sMenuItem[i].Name:='GN'+InttoStr(i);
        sMenuItem[i].Caption:=RoomDataSet.fieldbyName('Name').AsString;
        sMenuItem[i].Hint:=RoomDataSet.fieldbyName('Name').AsString;
        PopupMenu1.Items[2].Add(sMenuItem[i]);
        s:=3+i;
        PopupMenu1.Items[2].Items[s].Add(xMenuItem);
        RoomDataSet.Next;
      end;
    end;
    RoomDataSet.Close;
    //
  end;
end;

解决方案 »

  1.   

    var
      mItem: TMenuItem;
      I: Integer;
    begin
      while not RoomDataSet.Eof do
      begin
        mItem := TMenuItem.Create(PopupMenu1);
        mItem.Name:='GN'+InttoStr(RoomDataSet.RecNO);
        mItem.Caption:=RoomDataSet.fieldbyName('Name').AsString;
        mItem.Hint:=RoomDataSet.fieldbyName('Name').AsString;
        PopupMenu1.Items[2].Add(mItem);
        RoomDataSet.Next;
      end;
    end;
      

  2.   

    To:budded(System is bussy!)
    谢谢你的回复,不过你的方法再菜单菜单再次创建的时候还是会出错
      

  3.   

    这句话有问题
    PopupMenu1.Items[2].Items[s].Add(xMenuItem);
    其余代码我测试了一下,通过
      

  4.   

    谢谢,各位,自己解决了,问题是出再我在动态菜单后面又加了动态菜单
    也就是962veiri(风尘旅人) 说的
    PopupMenu1.Items[2].Items[s].Add(xMenuItem);
    因为xMenuItem是一开始创建好了,把它放到这段程序中就ok了。哇哈哈
    放分了。。