delphi: 如何在一个列表中存储 TCustomFrames 和记录
delphi: how to to store TCustomFrames and records in one list
我正在使用 TObjectList<TCustomFrame>
来存储 TCustomFrames
。现在我想在同一个列表中存储更多关于 TCustomFrame
的信息。 record
就好了。
您希望将 delphi class 哪个 TCustomFrames
和 records
存储在同一个列表中?
TCustomFrames
和 records
将在运行时添加。
创建一条记录来保存所有信息:
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
。
我正在使用 TObjectList<TCustomFrame>
来存储 TCustomFrames
。现在我想在同一个列表中存储更多关于 TCustomFrame
的信息。 record
就好了。
您希望将 delphi class 哪个 TCustomFrames
和 records
存储在同一个列表中?
TCustomFrames
和 records
将在运行时添加。
创建一条记录来保存所有信息:
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
。