TTreeView学习
详细参考:http://www.cnblogs.com/del/archive/2008/03/10/1098798.html
1,什么是TTreeView,TTreeNodes,TTreeNode ?
打个比方: 譬如 TreeView 是一个军营的"营部"! 这里会有营长、连长、排长、班长、战士等等.
我们把它们分成三种对象: 营部、营长(总当家)、营长的下属.
在这里的对应关系是:
TTreeView - 营部
TTreeNodes - 营长
TTreeNode - 营长的下属
上面的例子中的"营长"不是具体的哪个元素, 他代表着全营, 很多事情都是他说了算;
其他成员都是"营长"的兵.
换成 Delphi 的说法: TTreeView 不过是一个包含元素的框架, 最重要的是里面的元素;
每一个元素都是一个 TTreeNode 对象;
所有对象的集合也是一个对象: TTreeNodes, TTreeNodes 就像那个"营长"是个幕后管理者, 它对属下的所有成员有生杀大权.
学习 TreeView 要面对的不仅仅是 TTreeView 类, 更重要的是 TTreeNodes 和 TTreeNode 类.
TreeView1.Items 属性就是 TreeView1 的 TTreeNodes.
procedure TForm3.Button1Click(Sender: TObject); begin if Boolean(TreeView1.Items.Count) then //如果其中元素总数大于0 begin TreeView2.Items:=TreeView1.Items; TreeView1.Items.Clear; end; end; /// <summary> /// 使用Ttreeviewnodes的写法 /// </summary> procedure TForm3.Button2Click(Sender: TObject); var nodes:TTreeNodes; begin nodes:=TreeView2.Items; if Boolean(nodes) then begin TreeView1.Items:=nodes; nodes.Clear; end; end;
2,关于Items.Item[i]、Items[i];
下面四种写法效果完全一样:
{TreeView1.Items.Item[i] 是默认属性, 可以简写为: TreeView1.Items[i]} procedure TForm3.Button3Click(Sender: TObject); begin Self.Text:=TreeView1.Items.Item[i].Text; // for i := 0 to TreeView1.Items.Count-1 do // begin // TreeView1.SetFocus; // TreeView1.Select(TreeView1.Items.Item[i]); // end; if i< treeview1.Items.Count-1 then Inc(i) else i:=0; TreeView1.SetFocus; TreeView1.Select(TreeView1.Items.Item[i]); end; procedure TForm3.Button4Click(Sender: TObject); begin text:=TreeView1.Items[i].Text; if i<treeview1.Items.Count-1 then inc(i) else i:=0 ; TreeView1.SetFocus; TreeView1.Select(TreeView1.Items[i]); end; {每个元素都是 TTreeNode 类型的} procedure TForm3.Button5Click(Sender: TObject); var node:TTreeNode; begin node:=TreeView1.Items[i]; text:=node.Text; if i< treeview1.Items.Count-1 then inc(i) else i:=0; TreeView1.SetFocus; TreeView1.Select(node); end; {尽量使用 TTreeNodes 与 TTreeNode} procedure TForm3.Button6Click(Sender: TObject); var nodes:TTreeNodes; node:TTreeNode; begin nodes:=TreeView1.Items; node:=nodes[i]; text:=node.Text; if i< nodes.Count-1 then Inc(i) else i:=0; TreeView1.SetFocus; TreeView1.Select(node); end;