求生成TreeView的代码,用两位数字表一个节点!(100)

  • 主题发起人 主题发起人 war_cryer
  • 开始时间 开始时间
W

war_cryer

Unregistered / Unconfirmed
GUEST, unregistred user!
0101010102010201020201030301040401根据以上的节点,生成一个TreeView,求代码,谢谢!
 
我把你的信息放在一个memo中,执行如下代码:procedure TForm1.AddStrNode(Str: String);var sParent:String; t:TTreeNode; Function FindTreeNode(Code:String):TTreeNode; VAR I:Integer; begin Result:=nil; For I:=0 to TreeView1.Items.Count-1 do if TreeView1.Items.Text=Code then begin result:= TreeView1.Items; break; end; end;begin if Length(Str)>2 then sParent:=Copy(Str,1,Length(Str)-2) else sParent:=''; t := FindTreeNode(sParent); TreeView1.Items.AddChild(t,Str);end;procedure TForm1.Button1Click(Sender: TObject);var I:Integer; S:String;begin TreeView1.Items.Clear; for I:=0 to Memo1.Lines.Count-1 do begin S:= Trim(Memo1.Lines.Strings); AddStrNode(S); end;end;
 
如果说你需要显示的东西,出来上面的这些 编码外,还有其它的,编码只是确定树形结构的,则可以把刚才的第二个函数修改为:Type _NodeData=record Code:String; //代码 Name:String; //名称 end; PNodeData= ^_NodeData;procedure TForm1.AddStrNode(Str: String);var sParent:String; Node:TTreeNode; t:PNodeData; Function FindTreeNode(Code:String):TTreeNode; VAR I:Integer; begin Result:=nil; For I:=0 to TreeView1.Items.Count-1 do if PNodeData(TreeView1.Items.Data).Code=Code then begin result:= TreeView1.Items; break; end; end;begin if Length(Str)>2 then sParent:=Copy(Str,1,Length(Str)-2) else sParent:=''; Node := FindTreeNode(sParent); new(t); t.Code := Str;// t.Name:= ???? TreeView1.Items.AddChildObject(Node,Str,t);end;
 
非常感谢,我测试一下啊
 
我用这个方法也成功了 with ADOQuery1 do begin Close; SQL.Text := 'select * from hr_orgaizeation order by F_NodeCode '; Open; First; while not Eof do begin case Length(Fieldbyname('F_NodeCode').AsString) of 4 : begin ANode := treeview1.Items.Add(nil,Fieldbyname('F_Name').AsString); end; 8 : begin BNode := treeview1.Items.AddChild(Anode,Fieldbyname('F_Name').AsString); end; 12 : begin CNode := treeview1.Items.AddChild(Bnode,Fieldbyname('F_Name').AsString); end; 16 : begin DNode := treeview1.Items.AddChild(Cnode,Fieldbyname('F_Name').AsString); end; 20 : begin ENode := treeview1.Items.AddChild(Dnode,Fieldbyname('F_Name').AsString); end; else end; Next; CodeSite.SendMsg(Fieldbyname('F_Nodecode').AsString); end; end;
 
最后一行 CodeSite.SendMsg(Fieldbyname('F_Nodecode').AsString);看不明白,呵呵。只要你代码执行完成后,随便选中哪个节点,你能够立刻获得这个节点对应的Code,那你就成功了。成功之后,别忘了结贴。
 
呵呵,谢谢你的美意· ^_^
 
后退
顶部