Treeview用于显示按照树形结构进行组织的数据。   
    
  Treeview控件中一个树形图由节点(TreeNode)和连接线组成。TtreeNode是TTreeview的基本组成单元。   
  一个树的节点又包含文本(Text)和数据(Data)。Text为String类,Data则为无定形指针(Untyped   Pointer),可以指向一个与节点相联系的数据结构。   
       
  每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),用于说明子节点在Items中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。   
  用IndexOf方法获得子节点的顺序,绝对顺序(AbsoluteIndex)则是指从Treeview第一个项开始的顺序值, 第一个是0,如此推下去。Item属性则根据Index的值返回当前节点的第Index个子节点。Count则表明属于   
  此项的所有子节点的数量。用MoveTo方法将Item由一个位置移到另一个位置。   
    
  Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。   
  IsVisible属性表明一个项是否在树中能被看到,如果树全部展开那么这个Item是肯定可以被看到。   
    
  HasChildren属性表明一个项是否有子项。   GetFirstChild,   GetLastChild,   GetPrevChild,  and   GetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。   
    
  GetNextSibling   and   GetPrevSibling则返回在同一Level下的下一个和上一个项。   
  GetNextVisible   and   GetPrevVisible则返回能看得到的下一个和上一个项。如果一个节点有Parent,则HasAsParent方法返回True.   Parent为当前项的父项。Focused属性确定焦点是  
  否落在此节点上,被Focus时会一个标准的方框围住。很显然,只有一个节点会被聚焦。     
    
  Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。   
    
  DropTarget属性表明节点在拖动操作中是源还是目标。   
    
  .1.添加、删除、修改节点:   
  静态的方法可以在设计时通过Items的编辑器设置各节点的内容。   
  在添加和删除前必须保证有节点被选中(Treeview.Selected   =   nil)     用AddFirst,   AddFirstChild,   AddChild等先添加根节点,如Treeview.Items.AddFirst(   nil,   'Root');   
  然后以此为基础,添加此项的子节点。   
    
  删除节点   
  Treeview.Selected.Delete   
    
  编辑节点内容   
  Treeview.Selected.EditText   
    
  注意:由于根节点没有父节点   (TTreeNode.Parent=   nil)   
  此外,在大批量添加数据到Treeview中时最好使用   
    TreeView.Items.BeginUpdate;   
    添加节点   
    TreeView.Items.EndUpdate   
  这样能加快显示速度。   
    
  2.在节点上添加图象   
  Treeview中几个与图象相关的属性:   
    SelectedIndex:当节点被选中时在TimageList   中选什么样的图象   
    OverlayIndex:选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),   
  比如一个节点不可用时加一副X图象在其前面。   
    ImageIndex:在常态时选用的图的序号   
    StateIndex:   在StateImages这个ImageList中对应的序号,-1时不显示图象   
    比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以显示图象。在Form中放置一ImageList控件,加入几个图片,分别被Index为0,1,…   
  在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的ImageIndex表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。   
    
  3.关于Level   
  Level的概念可以用下图表示:   
  Level0     Level1   Level2   
    
  4.排序   
  SortType决定什么时候进行排序;   
  TreeView.AlphaSort对节点进行排序,如果不能满足要求,你可以定义自己的CustomSort方法。   
    
  5.Drag&Drop操作,与标准的拖放操作使用方法一样   
    
  ----------------------------------------------------------------------------   
  TreeView的使用方法     
    
    
  基本信息:   
  TreeView   是一个显示树型结构的控件,每一个节点都是一个新类, 使用具有代表性每个节点都有四个值:   
  TEXT:显示文字   Image   Index:显示图形序号   
  Selected   Index:   
  State   Index:   
    
  (1)建立目录项(本例中使用的TREEVIEW名称为:TvwTips)   
    
  增加根目录下的节点:(节点)   
 
  var  
  CatNode   :   TTreeNode;   //先建立一个TREEVIEW使用的子对象  
  begin  
  TvwTips.SetFocus;   //将焦点置到这个TREEVIEW控件上  
  {   在根标题下建立一个新的子标题   }  
  CatNode   :=   TvwTips.Items.AddChild(    
  TvwTips.Items.GetFirstNode,'New   Category'   );  
  CatNode.ImageIndex   :=   1;  
  CatNode.SelectedIndex   :=   2;  
  CatNode.EditText;   {   允许用户改变这个标题   }  
  end; 
 
    
  增加下一级目录(内容):

var  
  ParentNode,   TipNode   :   TTreeNode;   //先建立TREEVIEW使用  
  的子对象  
  VersionNum   :   Integer;  
  begin  
  TvwTips.SetFocus;   //将焦点置到这个TREEVIEW控件上  
  VersionNum   :=   TMenuItem(   Sender   ).Tag;   {   Ver   num   of   new   tip   }  
  ParentNode   :=   TvwTips.Selected;   {   取出当前的选中节点   }  
  if   ParentNode.Level   =   nlTip   then{   Parent   cannot   be   a   tip   node   }  
  ParentNode   :=   TvwTips.Selected.Parent;  
   
  TipNode   :=   TvwTips.Items.AddChildObject(   ParentNode,'New    
  Subject',Pointer(   VersionNum   )   );  
  TipNode.ImageIndex   :=   3;   {   Normal   tip   bitmap   }  
  TipNode.SelectedIndex   :=   4;   {   Highlighted   tip   bitmap   }  
  TipNode.MakeVisible;   {   Move   new   tip   node   into   view   }  
  TipNode.EditText;   {   Immediately   allow   user   to   edit   subject   }  
  EnableTreeViewFunctions(   TipNode.Level   );  
  RtfTip.Clear;  
  RtfTip.Modified   :=   False;  
  end; 
   
    
  (2)说明   
  TvwTips.Items.GetFirstNode   返回TREEVIEW的第一个节点,函数类型为   
  :TTreeNode     
  TvwTips.Items.Count   返回当前TreeView的全部节点数,整数   
  TvwTips.Selected.Level   返回当前选中节点的在目录树中的级别,   
  根目录为0   
  TvwTips.Selected.Parent   返回当前选中节点上级节点,函数类型为   
  :TTreeNode
特别提示: Expand(False)不展开其子孙结点,   Expand(True)全部展开

转自 https://blog.csdn.net/zisongjia/article/details/74981594

unigui的菜单树补习【2】treeview的更多相关文章

  1. WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...

  2. bootstrap treeview实现菜单树

    本博客,介绍通过Bootstrap的treeview插件实现菜单树的功能. treeview链接:http://www.htmleaf.com/Demo/201502141380.html ORM框架 ...

  3. 【转】WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 菜单Menu的自定义样式: 右键菜单ContextMenu的自定义样式 ...

  4. java实现的可以无限级别添加子节点的菜单树

    网上大部分菜单树,都是单独用js代码来实现的,这样做的缺点是:用户无法动态的设置菜单项,比如,超级管理员可能需要根据每个用户的权限,赋予他们不同的系统功能,不同的功能对应着不同数量的菜单项. 对于此问 ...

  5. 以正确的姿势实现一棵JavaScript菜单树

    菜单树是常见的前端特效, 一般长下面这样 还有各种形态的变种, 有长这样的 也有长这样的 尽管这些菜单的相貌都不尽相同, 在功能实现的本质上却都是相同的.实现程序的大致流程如下 读取服务器端的菜单数据 ...

  6. vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成

    由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...

  7. Mybatis通过colliection属性递归获取菜单树

    1.现有商品分类数据表category结构如下,三个字段都为varchar类型 2.创建商品分类对应的数据Bean /** * */ package com.xdw.dao; import java. ...

  8. DWZ SSH2 菜单树--使用Struts2 标签(iterator/set/if 组合使用)

    最近在研究DWZ框架,然后要写一个菜单树,后台我使用了SSH2,然后想把菜单通过后台传过来的对象展示出来. 但是,发现应用样式的时候,如果子菜单在子循环中为空的话,会多出一对空标签“<ul> ...

  9. vue+element-ui实现无限级动态菜单树

    使用vue+element-ui实现无限级动态菜单 该案例实现主要使用递归的思想,递归对新人来容易迷惑的是自己调用自己,直到满足条件为止,接下来我们就一步一步实现一个动态多级菜单vue组件 搭建项目并 ...

随机推荐

  1. balsamiq mockups 注册

    Name: helloWorld Key: eJzzzU/OLi0odswsqslIzcnJD88vykmpsUQCNc41hjV+7q5+AF74Ds8=

  2. 洛谷 P4149 [ IOI 2011 ] Race —— 点分治

    题目:https://www.luogu.org/problemnew/show/P4149 仍然是点分治: 不过因为是取 min ,所以不能用容斥,那么子树之间就必须分开算,记录桶时注意这个: 每次 ...

  3. 42.extjs Combobox动态加载数据问题,mode:local 还是remote

    问题: Java代码   var fabircTypeDs = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: 'province. ...

  4. E20170804-mk

    epic n. 史诗; 叙事诗; 史诗般的作品; estimate vt. 估计,估算; 评价,评论; 估量,估价; Sprint  vi. 冲刺,全速短跑; n. 全速短跑; 速度或活动的突然爆发; ...

  5. php的类型转换

    转自:http://www.tianzhigang.com/article.asp?id=280 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: (int).(integer):转换成 ...

  6. P4049 [JSOI2007]合金

    传送门 我数学可能白学了-- 因为三个数加起来等于\(1\),那么只要用前两个数就能表示,那么就能把每一种金属看成一个二维向量.考虑只有两个向量的时候,设这两个向量为\(a,b\),那么一个向量\(c ...

  7. quill支持json吗

    RT quill目前的驱动(2.4.2版本)不支持json,等待作者更新版本吧

  8. CSS发布时间

    * 1996年W3C正式推出了CSS1.* 1998年W3C正式推出了CSS2.* CSS2.1是W3C现在正在推荐使用的.* CSS3现在还处于开发中.

  9. [转]linux之ps命令

    转自:http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html Linux中的ps命令是Process Status的缩写.ps命令用来 ...

  10. C#学习-处理Excel

    首先先了解下一个Excel文件的组成 1.一个Excel包含多个工作表(Sheet) 2.一个工作表(Sheet)包含多行(Row) 3.一行(Row)包含多个单元格(Cell)   如何判断一个单元 ...