TListの項目が変更(追加・削除・抽出)されたことを知るには

TListは、項目が変更(追加・削除・抽出)されたときOnNotifyイベントが発生します。
OnNotifyイベントを使用すれば、変更(追加・削除・抽出)されたことを知ることができます。

サンプルアプリケーションでは、リストに項目を追加や削除などを行うと、メモ欄に変更内容を表示します。

000

/// <summary>リストに登録する項目</summary>
TMyItem = record
  ///   <summary>項目が作成された時間</summary>
  Time: string;
  constructor Create(ATime: TDateTime);
end;

TForm2 = class(TForm)
  …
private
  { Private 宣言 }
  FList: TList<TMyItem>;
  { Public 宣言 }
  ///   <summary>
  ///     項目がリストに追加または削除されたときに発生するイベント
  ///   </summary>
  ///   <param name="Item">
  ///     追加または削除された項目
  ///   </param>
  ///   <param name="Action">
  ///     変更のタイプ
  ///   </param>
  procedure MyNotify(Sender: TObject; const Item: TMyItem;
    Action: TCollectionNotification);
end;

フォームを作成するときに、リストのOnNotifyイベントにMyNotifyを設定します。
リストのに項目が追加・削除されるとMyNotifyが呼ばれます。。

procedure TForm2.FormCreate(Sender: TObject);
begin
  FList := TList<TMyItem>.Create;
  FList.OnNotify := MyNotify;
end;

MyNotifyイベントでは、リストの項目が変更されると、メモ欄に変更処理と項目を表示します。

procedure TForm2.MyNotify(Sender: TObject; const Item: TMyItem;
  Action: TCollectionNotification);
begin
  case Action of
    cnAdded:
      Memo1.Lines.Add('追加:' + Item.Time);
    cnRemoved:
      Memo1.Lines.Add('削除:' + Item.Time);
    cnExtracted:
      Memo1.Lines.Add('抽出:' + Item.Time);
  end;
end;

Addボタンを押すと、リストに項目を追加します。

procedure TForm2.ButtonAddClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Add(TMyItem.Create(Now));
end;

001

Removeボタンを押すと、リストの先頭の項目を削除します。

procedure TForm2.ButtonRemoveClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Delete(0);
end;

002

Extractedボタンを押すと、リストの先頭に項目を代入します。

procedure TForm2.ButtonExtractClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Items[0] := TMyItem.Create(Now);
end;

003

Clearボタンを押すと、リストの項目を削除します。

procedure TForm2.ButtonClearClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Clear;
end;

004

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください