添加 TreeView 节点的小问题

lanny540 2004-08-26 02:30:13
我在TREEVIEW 中先定义好两个节点 A ,B . 我想分别在其下面添加一个子节点
tv1.Items.AddChild(tv1.Items.Item[0],'aaa');
tv1.Items.AddChild(tv1.Items.Item[1],'bbb');

结果两个节点都添加到 节点A 下面去了,我应该如何实现我想要的结果呢????

谢谢大家帮助我~!!!
...全文
140 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luke5678 2004-08-26
  • 打赏
  • 举报
回复
这个不太好实现哦
lanny540 2004-08-26
  • 打赏
  • 举报
回复
再问一个问题,我如何才能新建一个节点时,在节点处会有一个文本框要求输入该节点的名称??

这个问题分我会另外给的.还请大家积极解答
luke5678 2004-08-26
  • 打赏
  • 举报
回复
呵呵,我只是指出楼主的2行代码没有考虑到的问题,给个思路罢了

lanny540 2004-08-26
  • 打赏
  • 举报
回复
我问的这个问题只是举个例子,实际情况远不是这样,所以.........

不过还是谢谢你,谢谢大家
lanny540 2004-08-26
  • 打赏
  • 举报
回复
luke5678(奇异) , 你说的方法只能解决 这个问题. 如果 A节点下还有其他的节点怎么呢??
你又去改吗???
luke5678 2004-08-26
  • 打赏
  • 举报
回复
ai,很简单的问题需要搞的这么复杂吗?
xingtao1016 2004-08-26
  • 打赏
  • 举报
回复
来晚了
happy1123 2004-08-26
  • 打赏
  • 举报
回复
举个例子
procedure BuildTree;
var
nodeA, nodeB: TreeNode;
i: integer;
begin
for i := 0 to tv1.Items.Count - 1 do
begin
if tv1.Items.Item[i].Text = 'A' then
nodeA := tv1.Items.Item[i];
if tv1.Items.Item[i].Text = 'B' then
nodeB := tv1.Items.Item[i];
end;
tv1.Items.AddChild(nodeA, 'aaa');
tv1.Items.AddChild(nodeB, 'bbb');
end;
zzlingaaa 2004-08-26
  • 打赏
  • 举报
回复
unit TreeFunc;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;

function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);

implementation


function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Bookmark: TBookmark; Resort: Boolean): TTreeNode;
var
ThisNode, Node: TTreeNode;
I: Integer;
begin
Node := nil; //nil = level 0 has no parent node
//this is checked by TreeFindItem
for I := 0 to Itemlist.count -1 do
begin
ThisNode := TreeFindItem(Sender, node, Itemlist[i]); //查找当前是否有此值
if ThisNode <> nil then Node := ThisNode else
begin
if I < Itemlist.count -1 then
begin
if I = 0 then Node := Sender.items.Add(Node, Itemlist[i])
else Node := Sender.items.AddChild(Node, Itemlist[i]);
end else
begin
if I = 0 then Node := Sender.items.AddObject(Node, Itemlist[i], Bookmark)
else Node := Sender.items.AddChildObject(Node, Itemlist[i], Bookmark);
end;
Node.stateIndex := Node.level + 1;
if Resort and (Node.parent <> nil) then Node.parent.alphasort;
end;
end;
Result := Node;
end;

function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
begin
if NodeItem = nil then NodeItem := Sender.items.getfirstnode
else NodeItem := NodeItem.getfirstchild;
//NodeItem is now the first item of the desired level
//if this level has no items, NodeItem is nil

if (NodeItem <> nil) and (NodeItem.text <> Name) then
repeat
NodeItem := NodeItem.getnextsibling;
until (NodeItem = nil) or (NodeItem.text = Name);
Result := NodeItem;
end;

function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
begin
Result := TreeAddItem(Sender, Itemlist, nil, false);
end;

procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
var
Node, Parent: TTreeNode;
begin
Node := TreeGetItem(Sender, ItemList);
while Node.level >= Level do
begin
Parent := Node.parent;
Node.delete;
if (Parent = nil) or (Parent.hasChildren) then break;
Node := Parent;
end;
end;


end.
luke5678 2004-08-26
  • 打赏
  • 举报
回复
...,就先进行扫描取得A,B的节点.
------------------------------
是啊,如何进行扫描,呵呵
lanny540 2004-08-26
  • 打赏
  • 举报
回复
多问一句, 如何进行扫描??
happy1123 2004-08-26
  • 打赏
  • 举报
回复
Sorry,我的Add方法打错了.应该是tv1.Items.Add(nil, 'A');
happy1123 2004-08-26
  • 打赏
  • 举报
回复
procedure BuildTree;
var
nodeA, nodeB: TreeNode;
begin
nodeA := tv1.Items.Add('A');
nodeB := tv1.Items.Add('B');
tv1.Items.AddChild(nodeA, 'aaa');
tv1.Items.AddChild(nodeB, 'bbb');
end;

如果A,B已经事先定义好了,就先进行扫描取得A,B的节点.
luke5678 2004-08-26
  • 打赏
  • 举报
回复
改成:

tv1.Items.AddChild(tv1.Items.Item[0],'aaa');
tv1.Items.AddChild(tv1.Items.Item[2],'bbb');

再试试

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧