TreeView 节点结构是://===============
所有项目
A项目
client
server
B项目
client
server//================如何鼠标点击了 a项目 或者 b项目 下的 client 节点,此时如何知道该 client节点 是TreeView里的第几个节点?
所有项目
A项目
client
server
B项目
client
server//================如何鼠标点击了 a项目 或者 b项目 下的 client 节点,此时如何知道该 client节点 是TreeView里的第几个节点?
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;
就是表示选中的第几个节点,有问题?
TreeView1.Selected.Index是节点的索引,但是这个索引是针对这一层节点,他排在第几个页言。不是整个树的。
二楼的方案是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;
client.AbsoluteIndex; //不过效率较低