如题。
  arraybtn: array of tbutton;
.....    for I := 1 to 10 do
  begin
    if Not Assigned(arraybtn[i]) then
    begin
      arraybtn[i] := Tbutton.Create(Application);
      arraybtn[i].Parent := Self;arraybtn := nil 是把资源释放掉,但是怎么把这些arraybtn都擦去?
为的是再创建一组button. 有什么好的办法吗?

解决方案 »

  1.   

    arraybtn := nil;不能释放资源freeandnil(arraybtn[i] );
      

  2.   

    “擦去”何解?如果你说的是隐藏,那么把Visible属性置为false就可以了;
    如果你说的是释放,那么就应该执行Free;
    具体方法是用循环通过Parent控件的Controls[]属性,把所属的button按照你需要的隐藏(或者删去)。
      

  3.   

    现在不是释放资源的问题,
      现在是如何把这些button从窗体上删除???
      

  4.   

    忘了说一点,“arraybtn := nil”仅仅是把指向对象的指针给清空了,而在堆上为该对象分配的资源并没有释放,最好的释放资源的办法是调用Free析构对象,用FreeAndNil也行。
      

  5.   

    假设你的button都在一个panel1里面:for i:= 0 to panel1.ControlCount-1 do
      if (panel1.Controls[i] is TButton) then
        (panel1.Controls[i] as TButton).Free;这样可以释放该panel1里面所有的button。
      

  6.   

    我的问题是现在需要不断地创建一组button。
    再创建下一组button之前需要把当前这一组button的资源
    释放并且从form上消除,以便显示下一组button.
    我用的是动态数组的方式,  请问:如何把动态创建的一组button消除????
      

  7.   

    freeandnil(arraybtn[i] );
    释放了自然就没了,最多PAINT一下你的PANEL
      

  8.   

    for I := 1 to 10 do  freeandnil(arraybtn[i]);你创建的控件肯定没有了!!!!再创建新的就可以了。 
     for I := 1 to 10 do begin
          arraybtn[i] := Tbutton.Create(Application);
      

  9.   

    to  lijinghe1(副乡长)   释放了自然就没了??呵呵,不是这样的,试一试吧
      

  10.   

    把要“隐藏”的button.vasible:=false或者button.free就行了吧
      

  11.   

    方法一:
        用 button.free;
           button:=nil;
    方法二:
        用 Parent的 RemoveControl 方法。
      

  12.   

    给你一个完整的方法:
    //删除按钮;
    procedure DeleteLedButtonsFromParent(tParent: TComponent);
    var
      tTmp: TComponent;
      i: Integer;
    begin
      with tParent do
      begin
        i := ComponentCount - 1;
        while (i >= 0) do
        begin
          tTmp := Components[i];
          if (tTmp is TfcShapeBtn) then
          begin
            RemoveComponent(tTmp);
            tTmp.Free;
          end;
          Dec(i);
        end;
      end;
    end;
    //创建按钮;
    procedure CreateButtons(iNum: Integer; jNum: integer; sCaption: array of
      string; sCode: array of string; sUnitID: array of string; ScrBox: TScrollBox);
    const
      BtnHeight = 40;
      BtnWidth = 50;
      BtnTop = 4;
      BtnLeft = 4;
      BtnBetween = 4;
    var
      i, j, k, Nums: Integer;
      tBtn: TfcShapeBtn;
    begin
      j := 0;
      k := 0;
      i := 0;
      if iNum < 0 then
        exit;
      while (i <= iNum - 1) do
      begin
        if ((btnTop + (j + 1) * (BtnBetween + BtnHeight)) > ScrBox.Height) then
        begin
          j := 0;
          k := k + 1;
        end;    tBtn := TfcShapeBtn.Create(ScrBox);
        tBtn.Parent := ScrBox;
        tBtn.Font.Charset := ANSI_CHARSET;
        tBtn.Font.Name := '&Euml;&Icirc;&Igrave;&aring;';
        tBtn.Font.Size := 9;
        tBtn.TextOptions.Alignment := taCenter;
        tBtn.TextOptions.WordWrap := True;
        tBtn.Width := BtnWidth;
        tBtn.Height := BtnHeight;
        tBtn.ShadeStyle := fbsNormal;
        tBtn.Shape := bsRect;
        tBtn.Left := btnLeft + K * (BtnBetween + BtnWidth);
        tBtn.Top := btnTop + J * (BtnBetween + BtnHeight);
        tBtn.Caption := sCaption[i];
        tBtn.ShadeStyle := fbsNormal;
        tBtn.Hint := sUnitID[i] + SEPARATOR_PHONE + sCode[i];    tBtn.ShowHint := True;
        tBtn.OnClick := BtnProcedure;
        Nums := i + 1;
        if Nums <= jNum then
          tBtn.Font.Color := clRed;
        j := j + 1;
        i := i + 1;
      end;
    end;呵呵,把分数给俺吧??