如何避免在按 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 中处理不正确。
我想创建一个由 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 中处理不正确。