动态控件的释放问题(100分)

  • 主题发起人 mimiafei
  • 开始时间
M

mimiafei

Unregistered / Unconfirmed
GUEST, unregistred user!
想在动态生成的Button 的事件中释放自己,可以没有?急
 
procedure button1click(sender...)
var
myform :tmyform;
begin
try
myform := tmyform(application);
myform.showmodal;
//myform.show //mdi子窗口是不能free的
finally
myform.free;
 
可以的,事件处理过程与按钮无关,按钮是否动态创建也无所谓。
procedure button1click(sender:TObject);
begin
button1.free;

...
end;
 
举个简单的例子:我在form1上建一个button1 ,onclick事件是在form1上建立一个动态button ,属性name赋值为mybtn,事件定义为form2.show。在form2上建立一个button1,事件定义为删除在form1上建立的动态控件,语句为:TButton(form1.FindComponent('mybtn')).Free;
语句没问题,也执行了删除,但form2在关闭时报错,请帮分析一下。谢谢!
 
好烦。有不有兄弟帮我一把。
 
就这些不会报错的,贴全部代码
 
to kinneng:已经报错了
 
form1 的代码 onbuttonclick已经申明
procedure TForm1.Button1Click(Sender: TObject);
begin
with Tbutton.Create(self)do
begin
parent:=self;
left:=100;
top:=100;
width:=200;
name:='mybtn';
caption:='111';
onclick:=onbuttonclick;
end;
end;
procedure TForm1.onButtonClick(Sender: TObject);
begin
form2.ShowModal;
end;
form2的代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
TButton(form1.FindComponent('mybtn')).Free;
end;
 
不行,必须设置为全局空间变量!
例如
Var
myfm: Tform;
MyBtn: TButton;
其他的语句!
 
procedure TForm1.onButtonClick(Sender: TObject);
begin
form2.ShowModal;
end;
改成form2.Show;就好了
 
wql的办法行不通。guqiu的可以了。如果我使用form2.showmodal,还有其他办法没有?谢谢!晚上可以放分了。
 
你干嘛要释放自己呐?mybtn已经加入到了form2的Components里了,form2释放的时候,自然会自动释放mybtn,不是多此一举吗?
 
var
but:tbutton;
but:=tbutton(form1.FindComponent('mybtn'));
freeandnil(but);
这样或许可以解决,不是很确定
 
谢谢了。
 
顶部 底部