以编程方式创建标签并从表单中删除标签

发布于 2024-12-21 18:57:32 字数 798 浏览 1 评论 0原文

我在这里得到了一些代码,它可以很好地创建标签,但是当我释放标签时,它仍然显示在表单上。即使它已被删除并且不再“分配”。

这是下面的代码。 它可以很好地创建标签,但不会删除。 无一例外,分配者说假。

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

I got some code here, which creates a label just fine, but when I free the label it STILL shows on the form. Even though it's been removed and no longer 'assigned'.

Here is the code below.
It creates the label fine, but wont remove.
No exceptions, and the assigned says false.

I can reproduce this with a TRectangle as well.

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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

删除会话 2024-12-28 18:57:32

我认为

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

可以提供帮助。

i think

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

could help.

凉墨 2024-12-28 18:57:32

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

需要检查/尝试的一些事情:

  • 您的 Parent 真的是 Form1 (因为您使用的是 Lab.Parent := Form1 而不是使用 self )?
  • 您是否尝试过在释放实验室后添加 Self.Repaint ?

FWIW, using Delphi XE (not XE2), your code works as expected (after making some small modifications, e.g. replacing Position.X with Left etc).

A few things to check/try:

  • is your Parent really Form1 (since you are using Lab.Parent := Form1 instead of using self) ?
  • have you tried adding Self.Repaint after free'ing Lab?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文