也談TTreeView、TListView用法一二 (轉)
這段時間,由於要解決一個技術問題,整天都在網上跑這跑那的查資料。由於我主要用作為開發工具,所以,CSDN文件中心的Delphi分類文件我也看了看,並收穫良多。在那幾百篇文件中,有幾篇文件論及了Vcl庫中的TTreeView與TListView的用法。講TreeView時,主要是講建樹的方法及資料結構;講ListView時,主要講了支援拖動等。今天,我想以TTreeView為例,講一講這兩個VCL類的另一個方面 -- TreeView或ListView 的Item的Data屬性。因為我看了裡面的文件,基本上沒有論及Data屬性,大多是用陣列或字串列表來儲存樹節點中關心的資料 -- 比如用陣列儲存某一資料的標識號。其實,用陣列或是TStrings來儲存都不是好的解決方法,大家都知道,TreeNode與ListItem都有一個指標型別的Data屬性,靈活運用這個指標,比用陣列和TStrings要好得多。當然,這只是一個小技巧,如果知道這方面技巧的朋友,請別見笑;常以陣列或TStrings來儲存節點資料的朋友,倒可以看一看^o^
我以比較常見的部門樹來舉例說明 -- 我們構建部門樹,並在樹節點中顯示部門名稱,當使用者選擇樹中的節點時,顯示部門相應的資料(比如人員列表)。我們知道,因為部門名稱有可能重複,因此部門樹中不能以部門名稱來定位,只能以部門程式碼來定位,故我們要將部門程式碼儲存在樹節點中。
首先,申明一個結構來用以儲存你的節點資料:
Type
TUnitNodeInfo = record
UnitCode : string;
{在這個記錄中,你還可以儲存一些其它自己感興趣的資料,比如部門經理等。。。}
end;
接著,申明一個指標指向那個結構:
PUnitNodeInfo : ^TUnitNodeInfo;
接著看一看建樹的處理:
procedure CreateUnitTree;
var
TreeNode : TTreeNode;
NodeInof : PUnitNodeInfo;
begin
...
{在此的開啟資料表、提取資料很多文件中有論及,我就不再重複}
TreeNoe := TreeView.Items.AddChild(...);
TreeNode.ImageIndex := ;{設定節點圖示,當然也可以不在此設定而在TreeView的事件中設定}
New(NodeInof);{為節點指標分配}
with NodeInfo^ do
begin
UnitCode := ;{對節點資料屬值}
......
end;{with...}
TreeNode.Data := NodeInof;
.....{上面程式碼放在複合語句中,增加樹中每一個節點}
end;
最後,在TreeView的OnChange事件中,可以這樣取得節點資料:
var
UnitCode : string;
begin
UnitCode :- TUnitNodeInfo(TreeView.Items[索引].Data^).UnitCode;
.........
end;
最後,不用樹的時候,記得釋放樹節點指標:
var
I : integer;
begin
for I := 0 to TreeView.Items.Count - 1 do
begin
Dispose(TreeView.Items[I].Data);
TreeView.Items[I].Data := nil;
end;
end;
ListView的相關用法與此類似,就不再講了。寫了這些,也不知道能不能讓各位看明白,有不對的地方,請多指教。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982610/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談ThreadStatic屬性用法thread
- 淺談promise用法Promise
- 也談元件化元件化
- Promise知一二Promise
- 也談鏈路劫持
- java泛型一二Java泛型
- 也談goroutine排程器Go
- 談談字串翻轉字串
- Android:DataBinding的一二事Android
- 淺談Golang中select的用法Golang
- 淺談python中的xpath用法Python
- 淺談Invoke 和 BegionInvoke的用法
- 也來談談人工智慧的罪與罰人工智慧
- 也談如何寫一個Webserver(-)WebServer
- 也談一談最近“基因編輯”這個事情吧
- 淺談vue中provide和inject 用法VueIDE
- 也談如何實現bind、apply、callAPP
- 也談如何寫一個Webserver(三)WebServer
- 也談SAP系統優缺點
- 也來談談無法刪除db link的問題
- [宇塵埃]也來談談到底什麼是中臺?
- 【轉】ng-class的用法
- 菜鳥也裝Linux(轉)Linux
- 老生常談:Promise 用法與原始碼分析Promise原始碼
- 談談Spring中的BeanPostProcessor介面(轉)SpringBean
- 外行假裝內行,我也來談談SAP BAPI和BADIAPI
- 也談談內卷化、996和程式設計師的發展996程式設計師
- 中等程度的談談DRP 計劃(轉)
- 淺談Vue-router的部分高階用法Vue
- 也淺談下分散式儲存要點分散式
- ES6 Promise 用法講解(轉)Promise
- 轉載golang中net/http包用法GolangHTTP
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- 羽夏閒談—— C 的 scanf 的高階用法
- 大齡碼農那些事——也談996.ICU996
- 淺談微服務轉型微服務
- [轉載]PrintDocument,PrintDialog與PrintPreviewDialog用法總結View
- 轉:SVN中trunk,branches,tags用法詳解
- Oracle行列轉換及pivot子句的用法Oracle