TreeView问题请教:如何给每个节点做个唯一的标记,让它不受移位、改名、节点层次属性变化的影响?(100分)

  • 主题发起人 主题发起人 凤仙花
  • 开始时间 开始时间

凤仙花

Unregistered / Unconfirmed
GUEST, unregistred user!
TreeView问题请教:如何给某个节点定义特别的识别标记(也就是不可见的唯一编码)?
节点太多,子节点也很多,删来删去又增加、移位、改名......最后程序应该如何正确识别用户选择的每个节点?(也就是:如何给每个节点做个唯一的标记,让它不受移位、改名、节点层次变化的影响?)
 
可以通过节点的Data属性标识
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 100 do
TreeView1.Items.AddObject(nil, 'aaaa' + IntToStr(i), Pointer(i));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
if TreeView1.Selected <> nil then
begin
i := Integer(TreeView1.Selected.Data);
ShowMessage(IntToStr(i));
end;
end;
 
你让 每个node的data指向一数据,此数据赋予绝对标识就可以了.我一般是把DATA指向一结构,结构里有一个index相当于数据表格的关键字
 
type
TTreeNodeData=^TNodeData;
TNodeData=record
bm:String;
end;

procedure TFMW_0101_SPXX.MakeRoleFuncTree;
Var
ParentNode,TempNode: TTreeNode;
p :TTreeNodeData;
sTemp : String;
begin
//装载根目录
TV_List.Items.Clear;
ParentNode:=TV_List.Items.AddFirst(nil,'所有类型');
ParentNode.ImageIndex := 3 ;
ParentNode.SelectedIndex := 2 ;
//装载一级目录
With DQ_SPLX Do
Begin
if not Active then Open;
if IsEmpty then Exit;
First;
While Not Eof Do
Begin
sTemp := FieldByName('SPLX_PK').AsString;
New(p);
p.bm :=sTemp;
TempNode:=TV_List.Items.AddChildObject(ParentNode
,FieldByName('SPLXMC').AsString,p);
TempNode.ImageIndex := 1;
TempNode.SelectedIndex := 2;

////装载(子模块)

Next;
End;
end;
end;
 
谢谢
不过还搞不太懂
 
也就是先申明一个带指针的类TTreeNodeData,
在装载树目录时加入指针,所得的指针都是有规律的编号,每一个结点的父、子、兄弟(上下)都很清楚,相增、删、编都可以。
给你一篇文章吧?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部