自定义组件控件不断重新创建问题

3
我是一个Firemonkey /自定义控件的新手,如果这是一个平凡的问题或者重复的问题,那么请见谅,但我现在卡住了,无法解决。

这是我的自定义控件代码:

unit swScheduler;

interface

uses
  System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.StdCtrls,
  FMX.Calendar, FMX.Objects;

type
  TswScheduler = class(TControl)
  private
    { Private declarations }
    paLaterale: TPanel;
    clCalendario: TCalendar;
    paLibero: TPanel;
    paScheduler: TPanel;
    rcSCTop: TRectangle;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create( AOwner: TComponent ); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property Align default TAlignLayout.None;
    property Enabled;
    property Left;
    property Top;
    property Width;
    property Height;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('CustomControls', [TswScheduler]);
end;

{ TswScheduler }

constructor TswScheduler.Create( AOwner: TComponent );
begin
 inherited;


  Self.Width := 650;
  Self.Height := 400;


    paLaterale := TPanel.Create( Self );
    paLaterale.Parent := Self;
    paLaterale.Align := TAlignLayout.Left;
    paLaterale.Width := 202;


    clCalendario := TCalendar.Create( Self );
    clCalendario.Parent := paLaterale;
    clCalendario.Align := TAlignLayout.Top;


    paLibero := TPanel.Create( Self );
    paLibero.Parent := paLaterale;
    paLibero.Align := TAlignLayout.Client;


  paScheduler := TPanel.Create( Self );
  paScheduler.Parent := Self;
  paScheduler.Align := TAlignLayout.Client;


  rcSCTop := TRectangle.Create( Self );
  rcSCTop.Parent := paScheduler;
  rcSCTop.Align := TAlignLayout.Top;
  rcSCTop.Height := 100;

end;

destructor TswScheduler.Destroy;
begin
  inherited;
end;


initialization
  RegisterClass( TswScheduler );

end.

它编译时没有错误,但我的问题是当我想要使用它时。
我将其放在设计时的表单上,没有任何问题/错误。
但是当我运行应用程序时,它会出现这种情况。
如果我关闭并重新打开IDE中的pas文件,则会执行相同的操作。
在运行应用程序时也是如此...
好像它一遍又一遍地执行构造函数。
我在Google上搜索过,但没有找到有关firemonkey的类似信息。
我尝试更改了一些东西,但无法使其工作。
如果您有任何提示,将不胜感激。先感谢您。
我正在使用Delphi XE8和Firemonkey。
1个回答

5

您需要将子组件的stored属性设置为false。

paLaterale := TPanel.Create(Self);
paLaterale.Stored := false;
etc

这不仅适用于Firemonkey,VCL控件也表现出相同的行为。 - Dsm
VCL组件没有Stored属性。它们有一个SetSubComponent()方法(FMX也是如此)。DFM流不会创建子组件的实例。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接