在Form8动态新建Form1里的菜单,Form8窗体释放后,Form1里新建的菜单不见了
procedure TForm8.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   action:=cafree;
end;
procedure TForm8.Button3Click(Sender: TObject);//新建的代码
var mi:tmenuitem;
    i,maxid:integer;
begin
    //新建菜单里的变化
     For i:=form1.PopupMenu1.Items[0].Count-3 downto 0 do
     begin   form1.PopupMenu1.Items[0].Delete(i);
     end;    with form1.adoquery1 do
       begin
        sql.Clear;
        sql.Add('select max(id) as exp1 from templet');
        open;
        first;
        maxid:=fieldbyname('exp1').AsInteger;
        end;
    for i:= maxid-1 downto 0 do
    begin
       if tcheckbox(panel1.Controls[i]).Checked then
          begin mi:=tmenuitem.Create(self);
                mi.Caption:=tcheckbox(panel1.Controls[i]).Caption ;
                mi.OnClick:=commandclick;
                mi.Tag:=i+1;
                form1.PopupMenu1.Items[0].Insert(0,mi);
                with form1.adoquery1 do
                begin
                sql.Clear;
                sql.Add('select * from templet where id='+inttostr(i+1));
                open;
                first;
                edit;
                fieldbyname('checked').AsInteger:=1;
                post;
                close;
                end;
          end         else with form1.adoquery1 do
                begin
                sql.Clear;
                sql.Add('select * from templet where id='+inttostr(i+1));
                open;
                first;
                edit;
                fieldbyname('checked').AsInteger:=0;
                post;
                close;
                end;
   end;   close;
end;

解决方案 »

  1.   

    var mi:tmenuitem;
    你的MI应该放到FORM1中,或者写一个单独的UNIT来声明
      

  2.   

    是呀var mi:tmenuitem;//局部变量
    生命周期=procedure TForm8.Button3Click(Sender: TObject);的周期
    也就是说这个过程结束了就释放了,呵呵
      

  3.   

    哎呀!我在form1下声明还是不行,一执行form8close.  action:=cafree;插入的菜单没了!
    var
      Form1: TForm1;
       mi:tmenuitem;
    真是怪事!!
      

  4.   

    试试
    mi:=tmenuitem.Create(Application);
      

  5.   

    希望这个对你有帮助...
      FPopMenu := TPopupMenu.Create(self);  FMenuRefresh := TMenuItem.Create(FPopMenu);
      FMenuRefresh.Caption := '刷新(&R)';
      FMenuRefresh.OnClick := doRefresh;
      FPopMenu.Items.Add(FMenuRefresh);  self.PopupMenu := FPopMenu;
    ...
      

  6.   

    yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜) 一语道破天机,谢谢!!立刻接