在ListView中,如何隨時將對象附加到已存在的ListItem中? (我知道我可以附加一個對象到一個ListItem與AddItem
,但我需要在創建ListItem後附加對象)。將對象附加到已存在的ListItem中?
回答
您可以通過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;
謝謝。我需要知道如何在一個ListItem對象後面附加一個對象,而不是如何在已經用'AddItem'附加後訪問對象。謝謝。 – user1580348 2013-02-17 16:52:11
@user - 第一句話是你的答案:Item.Data:= ... – 2013-02-17 16:56:19
你可以解決這個使用TListItem
的Data
財產。這通常是一種快速而簡單的方法。如果您需要列表項目來管理其關聯數據的生命週期,那麼唯一輕微的摺痕是。在這種情況下,您必須實施一個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
。所以你需要這樣寫:
procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem;
var S: string);
var
MyItem: TMyListItem;
begin
MyItem := Item as TMyListItem;
if MyItem.DateTime ....
end;
感謝大衛,對這種替代方法的很好和廣泛的解釋!但是,使用CreateItemClass替代方法時,用戶刪除某個項目時會發生什麼? ListView是否也會處理並銷燬我添加的自定義數據字段? (例如FDateTime)。 – user1580348 2013-02-17 18:28:02
是的。它會在物品上調用Free,並且你的區域將被丟棄,就像對象中的任何區域一樣。 – 2013-02-17 18:30:12
我是否需要在所有ListView方法實現中上傳Item參數,或僅在需要訪問自定義數據字段的位置? – user1580348 2013-02-17 18:46:41
- 1. 將數據附加到已存在的AudioBuffer對象
- 2. SharePoint 2010 - 客戶端對象模型 - 將附件添加到ListItem
- 3. 將對象附加到會話中
- 4. 如何將對象附加到Flash中的旋轉對象?
- 5. 將2D對象附加到WPF中的3D對象
- 6. 將字符串作爲對象添加到已存在的對象
- 7. 將計數變量附加到對象
- 8. 如何將圖像附加到對象?
- 9. 將HTML附加到JQuery響應對象
- 10. WPF將VisualState附加到對象屬性
- 11. rails3.1 - 將追查附加到activerecord對象
- 12. 如何將一些jQuery附加到已存在的函數?
- 13. 將命令附加到已存在的鍵綁定
- 14. 附加到Django中的對象
- 15. 將CSS添加到已存儲在變量中的jQuery對象的僞元素
- 16. 在Java3D中將對象附加到視圖平臺
- 17. 我可以在PyQt中將對象附加到QListWidgetItems嗎?
- 18. 將子節點/對象附加到three.js中的Object3D中
- 19. 如何將事件附加到動態對象或COM對象
- 20. 將Spring Multipart對象附加到Java郵件對象
- 21. localStorage - 將對象附加到對象數組
- 22. 將實體框架中的對象樹附加到對象上下文中
- 23. MongoDb:如何將附加對象插入到golang中的對象集合中?
- 24. 附加一個已存在的數組
- 25. 無法附加已存在的實體
- 26. 如何將文件附加到silverstripe中的數據對象3
- 27. 如何將SQLite ID附加到Android中的微調對象?
- 28. 將列表附加到python中的新列表作爲對象
- 29. 如何將HashMap附加到Flink中的配置對象?
- 30. AutoIT將已打開的IE窗口存儲到對象中
而不是使用'數據'你可以使用'OnCreateItemClass'並創建你自己的'TListItem'的專用子類。 – 2013-02-17 16:42:20
@DavidHeffernan謝謝。你有一個例子如何做到這一點? – user1580348 2013-02-17 16:54:17
你在你的清單項目中存儲什麼? – 2013-02-17 17:03:22