如何避免在按 ALT-F12 两次时创建重复的子组件?

How avoid that duplicate subcomponents get created when pressing ALT-F12 twice?

我想创建一个由 TLayout 组成的组件,其中包含 TRectangle

TRectangle 在组件的构造函数中创建,并以 TLayout 作为其父级。

问题:将这个组件放在窗体上时,按ALT-F12进入窗体的源代码编辑器,然后再按离开它,一个额外的子组件(TRectangle)父级被创建。 (TRectangle 甚至不应该出现在表单文本编辑器中,我认为这是导致问题的原因)

组件代码:

unit Problem;

interface

uses
  System.SysUtils, System.Classes, FMX.Types, FMX.Layouts, FMX.Objects;

type
  TProblem = class(TLayout)
  private
    rect: TRectangle;
  public
    constructor Create(AOwner: TComponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('FMX Problem Component', [TProblem]);
end;

{ TProblem }

constructor TProblem.Create(AOwner: TComponent);
begin
  inherited;
  rect := TRectangle.Create(nil);
  rect.Parent := Self;
end;

end.

我确定答案很简单,但仍然会很感激。

对矩形使用 Stored := False:

constructor TProblem.Create(AOwner: TComponent);
begin
  inherited;
  rect := TRectangle.Create(nil);
  rect.Parent := Self;
  rect.Stored := False
end;

SetSubcomponent 似乎在 FireMonkey 中处理不正确。