TreeView使用笔记

TreeView使用笔记TreeView 由节点构成 建树通过对 TreeView items 属性进行操作 Items 是一个 TTreeNodes 对象 这是一个 TTreeNode 集 一 针对 TTreeNodes 也就是 TreeView Items 有这些属性 1 count 节点个数 2 item index 通过 index 得到节点 二

大家好,我是讯享网,很高兴认识大家。

 TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。

一、针对TTreeNodes,也就是 TreeView.Items,有这些属性:
1、count,节点个数。
2、item[index]  ,通过index得到节点。

二、针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有:
AddFirst添加第一个根节点。由此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。该函数返回新添加的节点。
AddChildFirst添加第一个子节点,要求有父节点作为其参数。返回新添加的节点。
AddChild添加一个子节点,要求有父节点作为其参数。返回新添加的节点。
Add添加一个兄弟节点,要求有兄弟节点作为其参数。返回新添加的节点。

三、针对TTreeNodes,也就是 TreeView.Items,常用的得到节点的操作有:
GetFirstNode() 得到根节点。
然后配合TTreeNode.GetNext(),就可以访问所有的节点。

四、建树举例:

var
  root_node,cur_node:TTreeNode;
begin
  root_node:=AddFirst(nil,'根节点1');
  cur_node:=addChildfirst(root_node,nil,'根节点1_child1');
  add(cur_node,'根节点1_child2');
  root_node:=Add(nil,'根节点2');
  AddChildFirst(root_node,'根节点2_child1');  
end;

当修改一个节点的text时,会触发TTreeView.onEdit事件。


六、将节点和节点所对应的数据联系起来
对于每个TTreeNode,有个Data属性,可以存放一个指针。我们可以利用这个域来存放与节点对应的自己的数据。
1.我们先定义一个数据结构,作为记录我们要记录的数据。如:
type 
  PMyData=^TMyData;
  TMyData=Record
    sFName:string;
    sLName:String;
    nIndex:integer;
  end;

2.然后,创建数时,将节点和节点数据联系起来:
procedure TForm1.Button1Click(Sender: TObject);
var
  myshuju: PMyData
  cur_node:TTreeNode;
begin
  New(MyRecPtr);  //记住,一定要先分配内存。有几个节点,就要分配几次内存。
  myshuju^.FName:=Edit1.Text;
  Myshuju^.LName := Edit2.Text;
  TreeViewIndex := StrToInt(Edit3.Text);
  with TreeView1 do
  begin
    cur_node:=items.AddFirst(nil,'first');
    cur_node.data:=myshuju;
  end;
end;

3.当我们选中一个节点时,就可以使用我们的数据了。
procedure  TForm1.TreeView1Change(Sender:TObject;Node:TTreeNode);
begin
   if node.data<>nil then
    self.label1.caption:=pmyData(node.data)^.Fname+pmyData(node.data)^.Lname
end;


七、一般使用流程:
1、添加全局变量:
   b_first:boolean;  //记录是否是第一次访问节点,因为此时数据还未准备好,而一旦访问节点就会触发OnChange事件,在此事件处理函数中也许会出错。
2、在FormCreate中,
  a、设置b_first:=true;
  b. 创建数并将节点与数据联系。
3、在FormShow中
  设置b_first:=false;
4.在事件OnChange中处理节点被选中事件。
5.在Edit中处理节点被修改Text事件。
  并调用OnChange.
6.在 TreeView.Destory中
  释放Data 中指向的内存空间。


讯享网

八、生成树型结构

 

九、获取鼠标的信息

procedure TBaseFee_Form.TV_BuildMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  hotNode: TTreeNode;
begin
  if ((not (Sender is TCheckTree)) or (Button <> mbLeft)) then
    Exit; //不是鼠标左键则离开
  hotNode := TCheckTree(Sender).GetNodeAt(X, Y);
  if (not Assigned(hotNode)) then
    Exit; //鼠标所在位置没有TreeNode则离开

  if (htOnStateIcon in TCheckTree(Sender).GetHitTestInfoAt(X, Y)) then //如果按下的区域在图标区,说明checked状态变了
  begin
    SetListViewList([TV_Build], self.BaseFee_LV);
    self.BeSureButton.Enabled := true;
  end;
  CalcAreaBaseFee();
end;

10、构建一棵树方法

构建一棵树通常要有一个节点记录,记录包含一个ID(节点ID)、PID(父节点ID)、Data(数据信息),装载树一般通过递归遍历节点记录,分别对根节点和非根节点做处理
if root then
begin
   for i :=0 to Count {节点记录数} do
   begin
      如果是根节点就添加节点
      递归遍历获取根节点下节点
      退出
   end
end
else
begin
   处理非根节点
end; 

过程原型:

procedure DoLoadSomething(pTPID: integer; root:boolean; pNode: TTreeNode); 

小讯
上一篇 2025-03-25 20:34
下一篇 2025-03-24 14:29

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/128271.html