特急的问题,在线等待-怎样才能遍历出TreeView某选中节点下的所有子节点?(200分)

  • 主题发起人 主题发起人 飞雪轩主
  • 开始时间 开始时间

飞雪轩主

Unregistered / Unconfirmed
GUEST, unregistred user!
才能列出TreeView某选中节点下的所有子节点,并放入ListBox中?数据库结构如下
ID NAME PARENTID
1 1 0
2 2 1
3 3 2
4 4 3
5 5 4
6 6 1
当我选中节点ID为1时属于这个节点的子结点以及子结点的所有子结点全列出来,放到一个
ListBox中。注意:子结点的层数为不可知,不可任意深!!!
 
急用先提一下
 
请参看delphi的Treeview控件中的FullExpend方法的代码
 
用递归法就行
 
同楼上呀。递归
 
怎么递归呀,可不可以给个例子看看?
 
急用啊请大家给个示例
 
我来写个例子,再等等!
 
好呀,急切等待。顺便更正一下,子结点的层数为任意深
 
好了!没问题!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure GetAllSubNode(SelNode:TTreeNode);
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.GetAllSubNode(SelNode: TTreeNode);
var
TN:TTreeNode;
begin
ListBox1.Items.Add(SelNode.Text);
if SelNode.HasChildren then
begin
TN:=SelNode.getFirstChild;
GetAllSubNode(TN);
TN:=TN.getNextSibling ;
while TN<>nil do
begin
GetAllSubNode(TN);
TN:=TN.getNextSibling ;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear ;
GetAllSubNode(TreeView1.selected);
end;

end.
 
让我先看看再散分
 
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
GetAllNode(TreeView1.Selected);
end;

procedure TForm1.GetAllNode(Node: TTreeNode);
var
SubNode:TTreeNode;
begin
ListBox1.Items.Add(Node.Text);
SubNode:=Node.getFirstChild;
if Assigned(SubNode) then
while Assigned(SubNode) do
begin
GetAllNode(SubNode);
SubNode:=Node.GetNextChild(SubNode);
end;
end;
 
用递归法就行
建议搜索,以前谈过这问题!
 
dirk的算法很标准,同时把当前节点都放进去了.
我再写一个:
procedure TForm1.GetAllSubNode(SelNode: TTreeNode);
var
int:i;
begin
ListBox1.Items.Add(SelNode.Text);
if SelNode.HasChildren then
begin
for i:=0 to SelNode.Count do
begin
//如果不要选中的那个节点把 ListBox1.Items.Add(SelNode.Text);移到这里就是了
GetAllSubNode(SelNode.Item);
end;
end;
end;
调用同上
 
多谢dirk老兄,你的方法成功了。你可真高手中的高手,小弟好生佩服。
200分奉上不成敬意!
 
不敢当,我只是晚辈,离高手还差得远呢,只不过我经常用TTreeView,对TTreeView组件
的操作很熟罢了!谢谢你的分!
 
后退
顶部