以编程方式创建和删除表单中的标签

时间:2011-12-19 09:22:37

标签: delphi delphi-xe2 firemonkey

我在这里得到了一些代码,它创建了一个很好的标签,但是当我释放标签时,STILL会在表单上显示。即使它已被删除,不再“分配”。

以下是代码。 它创建标签很好,但不会删除。 没有例外,分配说错了。

我也可以用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;

2 个答案:

答案 0 :(得分:4)

我想

Lab.Parent:= NIL;
FreeAndNil(Lab);

可以提供帮助。

答案 1 :(得分:0)

FWIW,使用Delphi XE(不是XE2),您的代码按预期工作(经过一些小的修改,例如用Left等替换Position.X)。

要检查/尝试的一些事项:

  • 是你的父亲真的Form1(因为你使用的是Lab.Parent:= Form1而不是自己使用)?
  • 您是否尝试过免费实验后添加Self.Repaint?