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