実用的な小オブジェクトクラス、TStringListとの組み合わせを提供

1574 ワード

Borlandがサボるためなのか効率的なためなのか分からないが、多くのVCLはTStringListをメンバーとしてデータ(例えばTListBox/TStringGrid)を管理し、専用のItemタイプ(例えば、ListViewにはListViewItemタイプがある)を使用するのではなく、拡張したい場合(例えば、1つのListBoxに名前を表示し、IDを記録しなければならないが、このIDは表示できない)、トラブルにぶつかる
実際、StringList内部には、stringコンテンツに関連するオブジェクトを管理できるObjectsの管理が提供する.ただし、この対象はTObjectであることを要求する.多くの場合、IDや他の簡単な文字列を別に記録する必要があるかもしれません.オブジェクトを専門にする必要はありません.このとき、私たちの今日の主役は生まれました.


type

  //CopyRight(c) Hydonlee,        

  TMyObject = class(TObject)

  private

    FV: Variant;

  public

    constructor Create(v: Variant);

    property Value: Variant read FV write FV;

  end;



implementation



constructor TMyObject.Create(v: Variant);

begin

  self.FV := v;

end;


このクラスには1つのメンバーしかいません:Value(Variantタイプ)は、関数を構築することによって値を伝達し、作成することができます.普段string/integerを記録するのに便利になりました.もちろんもう一つの用途は多くのVCLコントロールにTAG属性があるが、この属性はintegerでしかなく、文字列を記録したいときは不便である.それはこの小さな対象類で手伝うことができます.
リストボックスにアイテムを追加し、クリックすると内部に含まれる値が表示されます.
procedure TForm1.btn1Click(Sender: TObject);

begin

  //CopyRight(c) Hydonlee,        

  lst1.Items.AddObject('I Love YOu', TMyObject.Create('1'));

  lst1.Items.AddObject('Do You Love ME', TMyObject.Create('2'));

  lst1.Items.AddObject('Sorry', TMyObject.Create('3'));

  lst1.Items.AddObject('BYE', TMyObject.Create('4'));

end;



procedure TForm1.lst1Click(Sender: TObject);

begin

  ShowMessage(TMyObject(lst1.Items.Objects[lst1.ItemIndex]).Value);

end;


レンガを投げて玉を引いて、みんなの指導を望みます(ブログ園delphierが少なくないことを発見します...)