我在程序运行时动态生成了一个groupbox6的控件(在一个按钮onclick事件中有这样代码)
if assigned(groupbox6) then
groupbox6.free;
if not assigned(groupbox6) then
groupbox6:=Tgroupbox.Create(form1);
groupbox6.Parent:=panel1;
然后又以groupbox6为parent,动态生成了一组memo数组和image数组
,第一次点击按钮时没有问题,但是第二次点击就说access violate at xxxxxxx
如果不释放groupbox6,就不会有问题,但是原来的groupbox6会影响新的groupbox6的视觉效果我怎样作才能释放原来的groupbox6,而再重新生成一个groupbox6呢?望指教!!!
if assigned(groupbox6) then
groupbox6.free;
if not assigned(groupbox6) then
groupbox6:=Tgroupbox.Create(form1);
groupbox6.Parent:=panel1;
然后又以groupbox6为parent,动态生成了一组memo数组和image数组
,第一次点击按钮时没有问题,但是第二次点击就说access violate at xxxxxxx
如果不释放groupbox6,就不会有问题,但是原来的groupbox6会影响新的groupbox6的视觉效果我怎样作才能释放原来的groupbox6,而再重新生成一个groupbox6呢?望指教!!!
if groupbox6<>nil then begin
groupbox6.free
groupbox6:=nil;
end; groupbox6:=Tgroupbox.Create(form1);
groupbox6.Parent:=panel1; end;
嘻,来迟了:)这句最重要:)
if assigned(groupbox6) then
FreeAndNil(groupbox6);
if not assigned(groupbox6) then
groupbox6:=Tgroupbox.Create(form1);
groupbox6.Parent:=panel1;
Form1: TForm1;
bt: tbutton;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
bt := TButton.Create(self);
bt.Parent := Self;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
bt.Free;
if Assigned(bt) then
ShowMessage('ok');
end;free并没有将指向生成按钮的指针请零
assigned:Tests for a nil (unassigned) pointer or procedural variable.
和有没有被释放没有关系
应该能行
那我该怎样做才能将指向生成按钮的指针请零呢?
用freeandnil()的结果和free相同,还是出错
begin
bt := TButton.Create(self);
bt.Parent := Self;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
bt.Free;
if Assigned(bt) then
ShowMessage('ok');
end;
1.如果你声明了变groupbox6,就不能用assigned 即使groupbox6未创建,assigned(groupbox6)也为真,在创建前执行if assigned(groupbox6) then groupbox6.free; 会出错
2.给新创建的box6赋名groupbox6,并以此来进行操作
3.用 findcomponent('groupbox6')=nil来判断是否已创建
4.其他新创建的对象同理
代码如下:
var
Form1: TForm1;
box6:Tgroupbox;procedure TForm1.Button1Click(Sender: TObject);
begin
if findcomponent('groupbox6')<>nil then
begin
findcomponent('groupbox6').Destroy;
end; if findcomponent('groupbox6')=nil then
begin
box6:=TGroupBox.Create(self);
box6.Name:='groupbox6';
box6.Parent:=form1;
end;
end;
assigned(groupbox6) then
groupbox6:=Tgroupbox6.create(self) 并不会出错
我在仔细查一查其他与groupbox6相关的代码,可能你们说的都没错,是其他地方有错的原因,找出来
后给给各位散分!