如何将treeview中一个父项下的所有子项选择并加入到listbox中,关键是如何选择其子项!(20分)

  • 主题发起人 主题发起人 yypeng
  • 开始时间 开始时间
Y

yypeng

Unregistered / Unconfirmed
GUEST, unregistred user!
if treeview1.selected.HasChildren then
for i:=0 to treeview1.Selected.Count-1 do
listbox1.Items.Add(treeview1.items[treeview1.Selected.index+i].text);
我用了上面的代码,但是不正确,它是将最上层节点的几个选中
AAAA  
  A1
  A2
  A3
BBBB。。当前选中,如何将B1-B3选择呢?
  B1
  B2
  B3
 
if treeview1.selected.HasChildren then
for i:=0 to treeview1.Selected.Count-1 do
listbox1.items.Add(treeview1.selected.item.text);
 
huntor 的答案似乎不能满足需求:)
这样:

var
Node: TTreeNode;
begin
Node := TreeView1.Selected;
if Assigned(Node) then
begin
Node := Node.getFirstChild; // 所选节点的第一个子项
while Assigned(Node) do
begin
listbox1.Items.Add(Node.Text);
Node := Node.getNextSibling; // 第一个子项的兄弟
end;
end;
end;
 
如果只有两层的话,那样就够了吧。我是根据yypeng的修改了最后一句。

如果更多层的话,当然beta的更合适了。

看实际需要吧。
 
var
i :integer;
begin
if TreeView1.selected.HasChildren then
begin
for i := 0 to TreeView1.Items.Count - 1 do
if ( TreeView1.Items.Level = TreeView1.Selected.Level + 1 ) and
( TreeView1.Items.Parent.Text = TreeView1.Selected.Text ) then
ListBox1.Items.Add( TreeView1.Items.Text );
end;
end;
 
只有用递归算法才是最明智的。可以把任意一个节点的所有子孙节点都列出来。
而且程序思路清晰明了。
递归的结束条件是节点没有子孙。具体实现代码你自己做吧,不难的。
 
递归求解,不错的,试试。
 
这个问题我在别的帖子里回答过了:
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.
 
谢谢大家的帮助, 看样子此贴的分是少了点希望大家能见谅
这点儿分大家一齐分了吧.
是大家一起穷还是先让一部分人富起来呢?
犹豫中........
 
让一部分人富起来吧
 
后退
顶部