本例效果图:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls; type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.dfm} {方法1: 按职务顺序入场}
procedure TForm1.Button1Click(Sender: TObject);
var
  Nodes: TTreeNodes;
  node: TTreeNode;
begin
  Nodes := TreeView1.Items;   {添加第一个元素}
  node := Nodes.Add(nil, '一连长'); {'一连长'好孤独, 旁边没人}   {现在 node 代表"一连长", 继续添加与其平级人员, 当然要参照"一连长"}
  Nodes.Add(node, '二连长');
  Nodes.Add(node, '三连长');   {安排"一连"的下一层: "排长"; 同时让 node 指向"一排长"}
  node := Nodes.AddChild(node, '一排长');
  Nodes.Add(node, '二排长');
  Nodes.Add(node, '三排长');   {添加平级用 Add, 添加下级用 AddChild; 继续:}
  node := Nodes.AddChild(node, '一班长');
  Nodes.Add(node, '二班长');
  Nodes.Add(node, '三班长');   {还有 AddChildFirst 和 AddFirst 是专门添加第一个的, 假如忘了第一个...}
  node := Nodes.AddChild(node, '战士2');
  Nodes.Add(node, '战士3');
  Nodes.Add(node, '战士4');
  Nodes.AddFirst(node, '战士1'); {用 AddFirst 可以让它站在前面}
end; {方法2: 按先后顺序入场}
procedure TForm1.Button2Click(Sender: TObject);
var
  Nodes: TTreeNodes;
  node: TTreeNode;
begin
  Nodes := TreeView1.Items;   node := Nodes.Add(nil, '一连长');
  node := Nodes.AddChild(node, '一排长');
  node := Nodes.AddChild(node, '一班长');
  node := Nodes.AddChild(node, '战士1');
  Nodes.Add(node, '战士2');
  Nodes.Add(node, '战士3');
  Nodes.Add(node, '战士4');   node := node.Parent;      {让 node 指向上一层}
  Nodes.Add(node, '二班长');
  Nodes.Add(node, '三班长');   node := node.Parent;
  Nodes.Add(node, '二排长');
  Nodes.Add(node, '三排长');   node := node.Parent;
  Nodes.Add(node, '二连长');
  Nodes.Add(node, '三连长');
end; {方法3: 因为没使用 TTreeNodes 和 TTreeNode, 挺麻烦的}
procedure TForm1.Button3Click(Sender: TObject);
begin
  TreeView1.Items.Add(nil, '一连长');
  TreeView1.Items.Add(TreeView1.Items[], '二连长');
  TreeView1.Items.Add(TreeView1.Items[], '三连长');   TreeView1.Items.AddChild(TreeView1.Items[], '一排长');
  TreeView1.Items.Add(TreeView1.Items[].Item[], '二排长');
  TreeView1.Items.Add(TreeView1.Items[].Item[], '三排长');   TreeView1.Items.AddChild(TreeView1.Items[].Item[], '一班长');
  TreeView1.Items.Add(TreeView1.Items[].Item[].Item[], '二班长');
  TreeView1.Items.Add(TreeView1.Items[].Item[].Item[], '三班长');   TreeView1.Items.AddChild(TreeView1.Items[].Item[].Item[], '战士1');
  TreeView1.Items.Add(TreeView1.Items[].Item[].Item[].Item[], '战士2');
  TreeView1.Items.Add(TreeView1.Items[].Item[].Item[].Item[], '战士3');
  TreeView1.Items.Add(TreeView1.Items[].Item[].Item[].Item[], '战士4');
end; {方法4: 用 with 简化了"方法3", 也够绕的; 推荐使用前两种方法}
procedure TForm1.Button4Click(Sender: TObject);
begin
  with TreeView1 do begin
    Items.Add(nil, '一连长');
    Items.Add(Items[], '二连长');
    Items.Add(Items[], '三连长');     Items.AddChild(Items[], '一排长');
    Items.Add(Items[].Item[], '二排长');
    Items.Add(Items[].Item[], '三排长');     Items.AddChild(Items[].Item[], '一班长');
    Items.Add(Items[].Item[].Item[], '二班长');
    Items.Add(Items[].Item[].Item[], '三班长');     Items.AddChild(Items[].Item[].Item[], '战士1');
    Items.Add(Items[].Item[].Item[].Item[], '战士2');
    Items.Add(Items[].Item[].Item[].Item[], '战士3');
    Items.Add(Items[].Item[].Item[].Item[], '战士4');
  end;
end; procedure TForm1.Button5Click(Sender: TObject);
begin
  TreeView1.Items.Clear;
  TButton(Sender).Caption := '清空';
end; end.

学习 TTreeView [3] - Add、AddChild、AddFirst、AddChildFirst、Parent的更多相关文章

  1. 类型TTreeView.items.add 与 TTreeView.items.addchild有何区别?(10分)

    我看了书上例子,好象两者都可以实现treeview中的node 的构建. addchild是给当前的node建一个子node,它比当前node要向右缩进几格add建立同级的node,不缩进 aNode ...

  2. 学习 TTreeView [15] - 连接数据库 (作为给 "丁永其" 和 "DELPHI万岁" 两位朋友的回复)

    本例效果图: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...

  3. 学习 TTreeView [16] - 给 TTreeView 添加复选框 (回复 "丁永其" 的问题)

    问题来源: http://www.cnblogs.com/del/archive/2008/05/15/1114450.html#1199402 本例效果图: unit Unit1; interfac ...

  4. 学习 TTreeView [1] - TTreeNodes、TTreeNode 与 Items、Items.Count、Items.Clear

    填写 TTreeView 的内容一般是这样开始的(下图), 不过我觉得最好习惯用动态建立. 打个比方: 譬如 TreeView 是一个军营的"营部"! 这里会有营长.连长.排长.班 ...

  5. Knockout学习笔记之二($root,$parent及$data的区别)

    以下是我从Google上找到的一个例子,非常生动形象,我修改了部分代码,具体内容如下: 对于$root 与$parent的区别: $root refers to the view model appl ...

  6. java 学习List 的 add 与set差分法

    /** * 在List收集在许多方面.add(int index,Object obj)方法与set(int index,Object e)方法不易区分 * .通过以下实例.能够看出两个方法中的差别 ...

  7. 学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点

    Add an Arbiter to Replica Set 在集群中加入仲裁节点,当集群中主节点挂掉后负责选出新的主节点,仲裁节点也是一个mongo实力,但是它不存储数据. 1.仲裁节点消耗很小的资源 ...

  8. PHP学习笔记之析构函数以及static,self,parent关键字

    引用 $jordan1 = &$jordan; 当jordan1 = null; //此时会直接调用析构函数 而当无&时,就需要等到所有的引用都为null时,才调用析构函数析构  乔丹 ...

  9. 学习 TTreeView [2] - Items.Item[i]、Items[i]、.Text、SetFocus(设置焦点)、Select(选择)

    本例效果图: 源码: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Co ...

随机推荐

  1. linux-如何快速替换IP

    导读 在Linux在做高可用的时候,经常会使用到虚拟IP.在windows上一个网卡可以配置两个IP,在Linux直接使用ip命令就可以添加了. 添加 ip address add 192.168.1 ...

  2. ROS launch 文件的编写

    ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可 ...

  3. HBase启动报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet

    今天进入hbase shell中输入命令报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is no ...

  4. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  5. Scracpy爬取图片实例

    非常简单,直接上爬虫代码 # -*- coding: utf-8 -*- import scrapy import urllib import logging class TopitComSpider ...

  6. AngularJS + CoffeeScript 前端开发环境配置详解

    AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全转入AngularJS后就有无法离开他的感觉了.虽然AngularJS的 ...

  7. CSS 背景实例

    CSS 背景属性属性 描述background 简写属性,作用是将背景属性设置在一个声明中.background-attachment 背景图像是否固定或者随着页面的其余部分滚动.background ...

  8. centos6 和centos7 安装git 的区别

    centos6 和centos7 安装git 的区别 centos6安装git yum install curl-devel expat-devel gettext-devel openssl-dev ...

  9. ecCodes 学习 利用ecCodes fortran90 api对GRIB文件进行读写

    参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf. ...

  10. selenium+ python自动化--断言assertpy

    前言: 在对登录验证时,不知道为何原因用unittest的断言不成功,就在网上发现这个assertpy,因此做个笔记 准备: pip install assertypy 例子: from assert ...