大家看看用不用表单关闭时释放tmenuitem?(30分)

  • 主题发起人 FlyDayDream
  • 开始时间
F

FlyDayDream

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfmMain.FormShow(Sender: TObject);
var
a:Tadoquery;
b:TmenuItem;
begin
a:=Tadoquery.create(self);;
a.Connection:=fmdm.conn;
try
a.sql.Text:='select trim(grade)+''|''+trim(collegenam)+''|''+trim(profession)+''|''+trim(levelname)+''|''+trim(formalname) as BJ,grade, collegenam, profession, levelname, formalname FROM wg GROUP BY grade, collegenam, profession, levelname, formalname order by grade';
a.Open;
while not a.Eofdo
begin
b:=Tmenuitem.Create(self);
b.Caption:=a.fieldbyname('BJ').AsString;

b.OnClick:=self.commClick;
self.PopupMenu1.Items.Add(b);
a.Next;
end;
finally
a.free;
end;
end;
 
你建立时是用的 Tmenuitem.Create(self);
可以关闭时释放,也可以不释放,因为menuitem的owner释放时会释放它拥有的Component
如果是用的create(nil)就一定要用代码释放它们
 
楼上正解。
 
不同意,楼上的楼上,绝对不能释放,否则出错 ,add 只是引用了,既然引用了,就有owner,
即使是create(nil)
 
楼上错误。2楼是说Create(nil) 在窗体关闭时不会被释放,而不是说要在FINALLY下面来释放,可以在FORMCLOSE中来释放。
 
引用了就不能释放?先看看TComponent的FreeNotification,RemoveFreeNotification,Notification方法和FFreeNotifies私有域吧!学习下VCL组件的通知机制。
 
多人接受答案了。
 
顶部 底部