delphi: 如何在一个列表中存储 TCustomFrames 和记录

delphi: how to to store TCustomFrames and records in one list

我正在使用 TObjectList<TCustomFrame> 来存储 TCustomFrames。现在我想在同一个列表中存储更多关于 TCustomFrame 的信息。 record 就好了。

您希望将 delphi class 哪个 TCustomFramesrecords 存储在同一个列表中?

TCustomFramesrecords 将在运行时添加。

创建一条记录来保存所有信息:

type 
  TFrameInfo = record
    Frame: TCustomFrame;
    Foo: string;
    Bar: Integer;
  end;

保持在 TList<TFrameInfo>.

我注意到您使用的是 TObjectList<T> 而不是 TList<T>。这样做的唯一充分理由是,如果您将 OwnsObjects 设置为 True。但这似乎不太可能,因为我怀疑该列表是否真的负责 GUI 对象的生命周期。作为未来的注意事项,如果您发现自己使用 TObjectList<T> 并将 OwnsObjects 设置为 False,那么您也可以切换到 TList<T>

现在,如果您确实需要列表来控制生命周期,那么您最好使用 class 而不是 TFrameInfo.

的记录
type 
  TFrameInfo = class
  private
    FFrame: TCustomFrame;
    FFoo: string;
    FBar: Integer;
  public
    constructor Create(AFrame: TCustomFrame; AFoo: string; ABar: Integer);
    destructor Destroy; override;
    property Frame: TCustomFrame read FFrame;
    // etc.
  end;

  constructor TFrameInfo.Create(AFrame: TCustomFrame; AFoo: string; ABar: Integer);
  begin
    inherited Create;
    FFrame := AFrame;
    // etc.
  end;

  destructor TFrameInfo.Destroy; 
  begin
    FFrame.Free;
    inherited;
  end;

然后将其保存在 TObjectList<TFrameInfo> 中,OwnsObjects 设置为 True