在ListView中,如何将对象随时附加到已存在的ListItem? (我知道我可以使用AddItem
将对象附加到ListItem,但是我需要在创建ListItem之后附加对象。
答案 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