我在程序运行时动态生成了一个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呢?望指教!!!

解决方案 »

  1.   

    begin
      if groupbox6<>nil then begin
        groupbox6.free
        groupbox6:=nil;
      end;  groupbox6:=Tgroupbox.Create(form1);
      groupbox6.Parent:=panel1;  end;
      

  2.   

    groupbox6:=nil;
    嘻,来迟了:)这句最重要:)
      

  3.   

    =nil不行啊。虽然groupbox6是可以重新创建一个,但是原来的那个groupbox6还在,还是可以看到(我用一个scrollbar来拖动groupbox6移动),真是奇怪
      

  4.   

    (在一个按钮onclick事件中有这样代码)
    if assigned(groupbox6) then
      FreeAndNil(groupbox6);   
     if not assigned(groupbox6)  then
      groupbox6:=Tgroupbox.Create(form1);
     groupbox6.Parent:=panel1;
      

  5.   

    var
      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.
    和有没有被释放没有关系
      

  6.   

    释放时采用FreeandNil(groupbox6)
    应该能行
      

  7.   

    对microjuz(天才弟弟) 说
    那我该怎样做才能将指向生成按钮的指针请零呢?
    用freeandnil()的结果和free相同,还是出错
      

  8.   

    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;
      

  9.   

    我接分了
    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;
      

  10.   

    首先,我感谢yesxwl() 详尽的解答,但必须指出的是我先定义了groupbox6:Tgroupbox;用if not 
    assigned(groupbox6) then
     groupbox6:=Tgroupbox6.create(self) 并不会出错
    我在仔细查一查其他与groupbox6相关的代码,可能你们说的都没错,是其他地方有错的原因,找出来
    后给给各位散分!