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

时间:2016-07-03 16:25:36

标签: delphi delphi-xe2 firemonkey

我想创建一个由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.

我确信答案是微不足道的,但我会很感激。

1 个答案:

答案 0 :(得分:1)

使用Stored:= false表示rect:

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

在FireMonkey中似乎错误地处理了SetSubcomponent。