unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; ListBox1: TListBox; procedure TreeView1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1Click(Sender: TObject); var i:integer; begin listbox1.Clear; if (treeview1.Selected.Count>0) then for i:=0 to Treeview1.Selected.Count-1 do listbox1.Items.Add(treeview1.Selected.Item[i].Text); end; end.
树的递归算法。 procedure GetFrameWorkIDList(Node : TTreeNode; var AIDList: TStringList); begin AIDList.Add(Node.Text); if Node.getFirstChild <>nil then GetFrameWorkIDList(Node.getFirstChild, AIDList); if Node.getNextSibling <> nil then GetFrameWorkIDList(Node.getNextSibling, AIDList); end;
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=0 to TreeView1.selected.Count-1 do begin showmessage(TreeView1.selected.item[i].text)//自己换成加入ListBox1 end; end;
给你个例子 procedure TForm1.Button1Click(Sender: TObject); var myNode : TTreeNode; myLevel : integer; begin ListBox1.Clear; myNode := TreeView1.Selected; if myNode <> nil then begin myLevel := myNode.Level;{ //要不包含选中结点则加上: myNode := myNode.GetNext; if myLevel <> myNode.Level then } repeat ListBox1.Items.Add(myNode.Text); myNode := myNode.GetNext; until (myNode = nil) or (myLevel = myNode.Level); end; end;
做个递归函数不就行了嘛! function TForm1.ReadChildNode(ParentNode:TTreenode):TTreenode; var childnode:TTreenode; begin childnode:=ParentNode.GetFirstChild; //按获得第一个子项 while childnode<>nil do begin ListBox1.Items.Add(childnode.Text); childnode:=ReadChildNode(childnode); //如子项不为空,进行递归调用 end; result:=ParentNode.parent.GetNextChild(ParentNode); //定位到该节点的下一节点 end;
得到当前节点的level,用当前节点的AbsoluteIndex到treeview的items.count-1去遍历,遍历终止条件是某个节点的level小于你的那个父节点的level就这样
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ListBox1: TListBox;
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1Click(Sender: TObject);
var i:integer;
begin
listbox1.Clear;
if (treeview1.Selected.Count>0) then
for i:=0 to Treeview1.Selected.Count-1 do
listbox1.Items.Add(treeview1.Selected.Item[i].Text);
end;
end.
begin
AIDList.Add(Node.Text);
if Node.getFirstChild <>nil then
GetFrameWorkIDList(Node.getFirstChild, AIDList);
if Node.getNextSibling <> nil then
GetFrameWorkIDList(Node.getNextSibling, AIDList); end;
var
i:integer;
begin
for i:=0 to TreeView1.selected.Count-1 do
begin
showmessage(TreeView1.selected.item[i].text)//自己换成加入ListBox1
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
myNode : TTreeNode;
myLevel : integer;
begin
ListBox1.Clear;
myNode := TreeView1.Selected;
if myNode <> nil then
begin
myLevel := myNode.Level;{ //要不包含选中结点则加上:
myNode := myNode.GetNext;
if myLevel <> myNode.Level then
}
repeat
ListBox1.Items.Add(myNode.Text);
myNode := myNode.GetNext;
until (myNode = nil) or (myLevel = myNode.Level);
end;
end;
function TForm1.ReadChildNode(ParentNode:TTreenode):TTreenode;
var
childnode:TTreenode;
begin
childnode:=ParentNode.GetFirstChild; //按获得第一个子项
while childnode<>nil do
begin
ListBox1.Items.Add(childnode.Text);
childnode:=ReadChildNode(childnode); //如子项不为空,进行递归调用
end;
result:=ParentNode.parent.GetNextChild(ParentNode); //定位到该节点的下一节点
end;