3

を使用しTObjectList<TCustomFrame>て保存していTCustomFramesます。TCustomFrame今、同じリストに関連する情報をいくつか保存したいと思います。Arecordでいいでしょう。

同じリストに保存TCustomFramesしたい Delphi クラスはどれですか?records

TCustomFramesandはrecords実行時に追加されます。

4

1 に答える 1

7

すべての情報を保持する単一のレコードを作成します。

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

それを に保持しTList<TFrameInfo>ます。

TObjectList<T>ではなくを使用していたことに注意してくださいTList<T>OwnsObjectsこれを行う唯一の正当な理由は、に設定している場合ですTrue。しかし、リストが実際に GUI オブジェクトの存続期間を担当しているとは思えないので、それはありそうにないようです。将来の注意として、set toを使用TObjectList<T>している場合は、 に切り替えることもできます。OwnsObjectsFalseTList<T>

ここで、ライフタイムを制御するためにリストが必要な場合は、レコードではなくクラスを使用することをお勧めします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>with にOwnsObjects設定して保持しTrueます。

于 2016-01-27T10:00:46.163 に答える