首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi怎么销毁某个控件(如panel)的子控件(如button)

2013-01-05 
delphi如何销毁某个控件(如panel)的子控件(如button)在窗体上动态创建一个panel,其owner为form,parentfor

delphi如何销毁某个控件(如panel)的子控件(如button)
在窗体上动态创建一个panel,其owner为form,parent=form
接着动态创建一个button,其owner为panel,parent=panel
现在想点击另外一个按钮后,将动态创建的button销毁掉,但是panel不被销毁。试了很多办法都不行。
不知道大家有没有碰到这样的问题?
[解决办法]
procedure TForm1.btnFreeClick(Sender: TObject);
var i:integer;
    TempCom:TComponent;
begin
  for i:=0 to Panel1.ComponentCount-1 do
    if Panel1.Components[i].Name='Button0'then
      TempCom:=Panel1.Components[i];
  TempCom.Free;
end;
执行完这一句
Button0不是已经没有了么??

你希望的是什么,全部都没有?全部都释放的话,代码也不是这样写的啊
[解决办法]
试用以下代码.
----------------------------------
单元文件

unit Unit11;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm11 = class(TForm)
    btnAdd: TButton;
    btnDel: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
  private
    { Private declarations }
    pnl: TPanel;
    iCounter : integer;
  public
    { Public declarations }
  end;

var
  Form11: TForm11;

implementation

{$R *.dfm}

procedure TForm11.btnAddClick(Sender: TObject);
var
  iTop : integer;
begin
  if pnl.ComponentCount > 0 then
    iTop := TButton(pnl.Components[pnl.ComponentCount - 1]).top + 40
  else
    iTop := 10;

  with TButton.Create(pnl) do
  begin
    Parent := pnl;
    top := iTop;
    Height := 30;
    Left := 20;
    Width := 100;
    Name := 'btn_' + IntToStr(iCounter);
    Caption := Name;
    Inc(iCounter);
  end;
end;

procedure TForm11.btnDelClick(Sender: TObject);
begin
  if pnl.ComponentCount > 0 then
    pnl.Components[pnl.ComponentCount - 1].free;
end;

procedure TForm11.FormCreate(Sender: TObject);
begin
  iCounter := 0;
  pnl := TPanel.Create(self);
  pnl.Parent := self;
  pnl.Align := alLeft;
  pnl.Width := 200;
  pnl.BevelOuter := bvRaised;
end;

procedure TForm11.FormDestroy(Sender: TObject);
begin
  pnl.free;
end;

end.

窗体文件  就两按钮
object Form11: TForm11
  Left = 0
  Top = 0


  Caption = 'Form11'
  ClientHeight = 464
  ClientWidth = 561
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 106
  TextHeight = 14
  object btnAdd: TButton
    Left = 456
    Top = 32
    Width = 75
    Height = 25
    Caption = 'add'
    TabOrder = 0
    OnClick = btnAddClick
  end
  object btnDel: TButton
    Left = 456
    Top = 80
    Width = 75
    Height = 25
    Caption = 'del'
    TabOrder = 1
    OnClick = btnDelClick
  end
end


[解决办法]
for j:=Form4.Components[i].ComponentsCount-1 to 0 do
这代码都错了……
应该是
for j:=Form4.Components[i].ComponentsCount-1 downto 0 do

热点排行