将对象附加到已存在的ListItem?

时间:2013-02-17 16:34:08

标签: delphi listview object delphi-xe2 listitem

在ListView中,如何将对象随时附加到已存在的ListItem? (我知道我可以使用AddItem将对象附加到ListItem,但是我需要在创建ListItem之后附加对象。

2 个答案:

答案 0 :(得分:6)

您可以通过TListItem.Data属性访问它。例如:

var
  ListItem: TListItem;
begin
  ListView1.AddItem('Item 1', nil);
  ...
  ListItem := ListView1.Items[0];
  ListItem.Data := Edit1;
  TEdit(ListItem.Data).Text := 'Updated text...';
end;

答案 1 :(得分:5)

您可以使用Data的{​​{1}}属性来解决此问题。这通常是一种快速简便的方法。唯一的轻微问题是,如果您需要列表项来管理其关联数据的生命周期。在这种情况下,您必须实现TListItem事件处理程序,以便在销毁节点时完成关联数据。

另一种方法是使用OnDeletion的子类。首先定义你的子类:

TListItem

然后为列表视图的type TMyListItem = class(TListItem) private FDateTime: TDateTime; public property DateTime: TDateTime read FDateTime write FDateTime; end; 事件实现一个处理程序。这确定了列表视图实例化的列表项的实际类。

OnCreateNodeClass

现在,列表视图将创建类procedure TForm1.ListView1CreateItemClass(Sender: TCustomListView; var ItemClass: TListItemClass); begin ItemClass := TMyListItem; end; 的项目。

因此,您可以像访问任何其他属性一样访问列表项的TMyListItem属性。当然,这种方法可以扩展到存储更多信息。

唯一要做的是,列表视图控件仍会为您提供编译时为DateTime的项目。所以你需要进行上传。

例如,假设您想在编辑项目时执行某些操作。事件处理程序如下所示:

TListItem

请注意,该项目的类型为procedure ListView1Edited(Sender: TObject; Item: TListItem; var S: string); 。所以你需要这样写:

TListItem