国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

也談TTreeView、TListView用法

2019-11-17 05:10:19
字體:
來源:轉載
供稿:網友

  這段時間,由于要解決一個技術問題,整天都在網上跑這跑那的查資料。由于我主要用Delphi作為開發工具,所以,各IT網站的Delphi分類文檔我也看了看,并收獲良多。在那幾百篇文檔中,有幾篇文檔論及了Vcl庫中的TTreeView與TListView的用法。
講TreeView時,主要是講建樹的方法及數據結構;講ListView時,主要講了支持文件拖動等。今天,我想以TTreeView為例,講一講這兩個VCL類的另一個方面 -- TreeView或ListView 的Item的Data屬性。因為我看了的文檔,基本上沒有論及Data屬性,大多是用數組或字符串列表來保存樹節點中用戶關心的數據 -- 比如用數組保存某一數據的標識號。其實,用數組或是TStrings來保存都不是好的解決方法,大家都知道,TreeNode與ListItem都有一個指針類型的Data屬性,靈活運用這個指針,比用數組和TStrings要好得多。當然,這只是一個小技巧,假如知道這方面技巧的朋友,請別見笑;常以數組或TStrings來保存節點數據的朋友,倒可以看一看。   我以比較常見的部門樹來舉例說明 -- 我們構建部門樹,并在樹節點中顯示部門名稱,當用戶選擇樹中的節點時,顯示部門相應的數據(比如人員列表)。我們知道,因為部門名稱有可能重復,因此部門樹中不能以部門名稱來定位,只能以部門代碼來定位,故我們要將部門代碼保存在樹節點中。  首先,申明一個結構來用以保存你的節點數據:Type
TUnitNodeInfo = recordUnitCode : 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的相關用法與此類似,就不再講了。寫了這些,也不知道能不能讓各位看明白,有不對的地方,請多指教。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 社旗县| 紫金县| 吉木萨尔县| 泊头市| 东丽区| 专栏| 财经| 东乡族自治县| 南安市| 林西县| 册亨县| 丽水市| 靖边县| 凤城市| 芦溪县| 措勤县| 乡宁县| 古交市| 名山县| 鲁甸县| 白银市| 七台河市| 临沭县| 阳谷县| 宝应县| 沈阳市| 梁河县| 枞阳县| 常州市| 松江区| 交城县| 鄂伦春自治旗| 连城县| 许昌市| 清水县| 南和县| 怀仁县| 沁源县| 丰镇市| 凤翔县| 富锦市|