填寫 TTreeVIEw 的內容一般是這樣開始的(下圖), 不過我覺得最好習慣用動態建立.
打個比方: 譬如 TreeVIEw 是一個軍營的"營部"! 這裡會有營長、連長、排長、班長、戰士等等.
我們把它們分成三種對象: 營部、營長(總當家)、營長的下屬.
在這裡的對應關系是:
TTreeVIEw - 營部
TTreeNodes - 營長
TTreeNode - 營長的下屬
上面的例子中的"營長"不是具體的哪個元素, 他代表著全營, 很多事情都是他說了算;
其他成員都是"營長"的兵.
換成 Delphi 的說法: TTreeVIEw 不過是一個包含元素的框架, 最重要的是裡面的元素;
每一個元素都是一個 TTreeNode 對象;
所有對象的集合也是一個對象: TTreeNodes, TTreeNodes 就像那個"營長"是個幕後管理者, 它對屬下的所有成員有生殺大權.
學習 TreeView 要面對的不僅僅是 TTreeVIEw 類, 更重要的是 TTreeNodes 和 TTreeNode 類.
TreeView1.Items 屬性就是 TreeVIEw1 的 TTreeNodes.
先做這樣一個例子: 按照同樣的編制, 再建一個營房.
准備工作: 在窗體上再添加一個 TreeVIEw2 和一個按鈕.
先看運行效果圖:
代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeVIEw;
TreeView2: TTreeVIEw;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption := '轉移';
Button2.Caption := '回防';
end;
{轉移: TreeView1 → TreeVIEw2}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Boolean(TreeVIEw1.Items.Count) then {如果其中元素總數不是 0}
begin
TreeView2.Items := TreeVIEw1.Items;
TreeVIEw1.Items.Clear;
end;
end;
{回防: TreeView2 → TreeVIEw1}
procedure TForm1.Button2Click(Sender: TObject);
var
Nodes: TTreeNodes; {盡早習慣使用 TTreeNodes}
begin
Nodes := TreeVIEw2.Items;
if Boolean(Nodes.Count) then
begin
TreeVIEw1.Items := Nodes;
TreeVIEw2.Items.Clear;
end;
end;
end.