TreeView 节点结构是://===============
所有项目
   A项目
      client
      server
   B项目
      client
      server//================如何鼠标点击了 a项目 或者 b项目 下的 client 节点,此时如何知道该 client节点 是TreeView里的第几个节点?

解决方案 »

  1.   

    可以用结点结构的lparam参数来记录结点次序。
    typedef struct tagTVITEM{//一个树型控件节点的属性
    UINT   mask; // 一个标志,表明这个结构体其他成员哪些是有效的
    HTREEITEM hItem; // 项目的句柄
    UINT   state;
    UINT   stateMask;
    LPTSTR pszText; // 文本
    int    cchTextMax; // 文本的最大长度
    int    iImage;//项目非选取状态下,要使用的image在图象列表中的索引
    int    iSelectedImage;//项目选取状态下,要使用的image在图象列表中的索引
    int    cChildren;
    LPARAM lParam;
    } TVITEM, FAR *LPTVITEM;
      

  2.   

    TreeView1.Selected.Level;
    就是表示选中的第几个节点,有问题?
      

  3.   

    TreeView1.selected.level是第几层节点,不是第几个节点。
    TreeView1.Selected.Index是节点的索引,但是这个索引是针对这一层节点,他排在第几个页言。不是整个树的。
      

  4.   

    唉!好人做底,送佛送到西吧。
    二楼的方案是C的,我给你个DELPHI的吧:
    1、定义结构体 ,这个在公用单元定义。
      PData=^TData;
      TData=Record
        type:string; //节点类型
         ItemID:string; //项目编号
         ItemName:string; //项目名称
         Price:string; //项目单价
      end;
    2、的调用的单元(也就是有TreeView的地方)定义如写:
       private
         MyData:PData;3、在创建节点时使用:
       New(MyData); //注意每创建一个节点就必须New个MyData(实际上就是分配内存).
       MyData.Type := 1;
       MyData.ItemID := 2222;
       ....
       cNode.Data := MyData; //把节点和结构关联起来。
    4、释放,因为每个节点都New了一个MyData,所以在释放节点的时候要释放这些资源,否则可能造成内存泄露。
       在TreeView的Deletion事件中,写如下代码:
       try
        if Node<>nil then
        begin
          Dispose(Node.Data); //删除结点时释放内存
        end;
       except
       end;
      

  5.   

    client节点 是TreeView里的第几个节点
    client.AbsoluteIndex; //不过效率较低