【发布时间】:2011-12-19 09:22:36
【问题描述】:
我在这里得到了一些代码,它可以很好地创建一个标签,但是当我释放标签时它仍然显示在表单上。即使它已被删除且不再“分配”。
这是下面的代码。 它可以很好地创建标签,但不会删除。 没有例外,分配的说假。
我也可以用 TRectangle 重现它。
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Lab : TLabel;
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
Lab := TLabel.Create(Self);
Lab.Parent := Form1;
Lab.Text := 'Hello!';
Lab.Position.X := 30;
Lab.Position.Y := 40;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FreeAndNil(Lab);
ShowMessage(BoolToStr(Assigned(Lab), true));
end;
【问题讨论】:
-
请显示更多代码(例如uses子句)或指定您使用的不是VCL而是FireMonkey,它(还不是)Delphi的主流框架...
-
我知道这可以从 Position.X/Y 属性中推断出来,但仍然...... -
如果你释放了一个
TControl后代(TLabel是)然后它会自动从它的所有者中删除它并将它的父设置为nil(检查你的版本的 VCL 代码,但是这肯定是 D2007 的情况)。您不需要将 parent 明确设置为 nil ,所以我不确定那里发生了什么。也许尝试使用Lab.Free; Lab := nil;而不是FreeAndNil()?
标签: delphi delphi-xe2 firemonkey