怎样按层遍历TreeView?

yxzzjg 2003-11-26 09:02:03
我想把数据库表中的数据按照我的要求添加到TreeView中,我采用分层添加的方法,问题

如下:

怎样按层遍历TreeView?在遍历的过程中当到达某个节点时就定位到该节点,并对其进行

操作?

望高手不吝赐教!!!
...全文
80 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WuLoveXue 2003-11-26
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
CurrNode : TTreeNode;
begin
with TreeView1 do
begin
CurrNode := Items.GetFirstNode;
while CurrNode <> nil do
begin
Items.AddChild(CurrNode,'子节点'); //这里给当前节点增加子节点

CurrNode := CurrNode.getNextSibling; //这个方法就是得到同属一层节点
end;
end;
end;
yxzzjg 2003-11-26
  • 打赏
  • 举报
回复
没有人会回答吗?
yxzzjg 2003-11-26
  • 打赏
  • 举报
回复
不光是遍历,在遍历的过程中我有可能要给当前遍历到的节点添加子节点
hyjwrok 2003-11-26
  • 打赏
  • 举报
回复
http://www.code-labs.com/article/articleinfo.php?id=1019


fhuibo 2003-11-26
  • 打赏
  • 举报
回复
procedure TForm1.FormShow(Sender: TObject);
var
TreeNodeProvince,TreeNodeCity : TTreeNode;
NodeDataRecPtr : PNodeDataRec;
RegAdmiCode,Temp : String;
begin
TreeView1.Items.Clear;
//TreeNodeProvince := nil;
//TreeNodeCity := nil;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := 'select * from Admipartition order by ADMIPARTITIONNO asc';
try
Open;
except
Close;
Exit;
end;
//----^

if not (bof and eof) then
begin
First;
while Not eof do
begin
Temp := fieldbyname('AdmipartitionNo').AsString;

if Copy(fieldbyname('AdmipartitionNo').AsString,3,4) = '0000' then
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString;
TreeNodeProvince := TreeView1.Items.AddObject(nil,FieldByName('ADMIPARTITIONNAME').AsString +
'' + FieldByName('ADMIPARTITIONNO').AsString,NodeDataRecPtr);

// TreeNodeProvince := TreeView1.Items.Add(nil,FieldByName('ADMIPARTITIONNAME').AsString
// );
end
else
if Copy(FieldByName('ADMIPARTITIONNO').AsString,5,2) = '00' then
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNO').AsString;
TreeNodeCity := TreeView1.Items.AddChildObject(TreeNodeProvince,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr);
end
else
begin
New(NodeDataRecPtr);
NodeDataRecPtr^.AdmiName := FieldByName('ADMIPARTITIONNAME').AsString;
NodeDataRecPtr^.AdmiCode := FieldByName('ADMIPARTITIONNo').AsString;
TreeView1.Items.AddChildObject(TreeNodeCity,FieldByName('ADMIPARTITIONNAME').AsString,NodeDataRecPtr);

end;
Next;
end;
end;
end;
TreeView1.SetFocus;
TreeView1Click(Self);
end;
myboor 2003-11-26
  • 打赏
  • 举报
回复
没看明白,是不是只要遍历所有节点就可以了?
可以使用递归的方法
WuLoveXue 2003-11-26
  • 打赏
  • 举报
回复
呵呵!你要给某个节点增加子节点并不是要让它获得焦点才行的!
只要你程序里能引用到它,用这个节点的ALLCHILDNODE就行了!
Frewin 2003-11-26
  • 打赏
  • 举报
回复
up
yxzzjg 2003-11-26
  • 打赏
  • 举报
回复
我在遍历的过程中要先把焦点定位在该节点,然后再进行某些操作,再移动到下一个节点,再操作!!!
hongqi162 2003-11-26
  • 打赏
  • 举报
回复
采用数组:
procedure TForm1.Button1Click(Sender: TObject);
var
a:array of Ttreenode;
node:TTreenode;
i,j,count:integer;
begin
i:=0;j:=0;
Count:=Treeview1.Items.Count;
setlength(a,Count);
node:=Treeview1.TopItem;
while node<>nil do
begin
a[i]:=node;
node:=node.getNextSibling;
i:=i+1;
end;
j:=i-1;
i:=0;
while i<Count do
begin
node:=a[i].getfirstchild;
while node <> nil do
begin
j:=j+1;
a[j]:=node;
node:=node.getNextSibling;
end;
i:=i+1;
end;
//以下用于集中输出,当然也可以在中间输出
for i:=0 to Count-1 do
listbox1.Items.Add(a[i].text);
end;
第1章Range(单元格)对象8 技巧1单元格的引用方法8 1-1使用Range属性8 1-2使用Cells属性9 1-3使用快捷记号9 1-4使用Offset属性10 1-5使用Resize属性11 1-6使用Union方法12 1-7使用UsedRange属性12 1-8使用CurrentRegion属性13 技巧2选定单元格区域的方法13 2-1使用Select方法13 2-2使用Activate方法14 2-3使用Goto方法15 技巧3获得指定行、列中的最后一个非空单元格15 技巧4定位单元格18 技巧5查找单元格19 5-1使用Find方法19 5-2使用Like运算符23 技巧6替换单元格内字符串24 技巧7复制单元格区域25 技巧8仅复制数值到另一区域28 8-1使用选择性粘贴28 8-2直接赋值的方法29 技巧9单元格自动进入编辑状态30 技巧10禁用单元格拖放功能30 技巧11单元格格式操作31 11-1单元格字体格式设置31 11-2设置单元格内部格式33 11-3为单元格区域添加边框34 11-4灵活设置单元格的行高列宽36 技巧12单元格中的数据有效性37 12-1在单元格中建立数据有效性37 12-2判断单元格是否存在数据有效性39 12-3动态的数据有效性39 12-4自动展开数据有效性下拉列表41 技巧13单元格中的公式42 13-1在单元格中写入公式42 13-2检查单元格是否含有公式43 13-3判断单元格公式是否存在错误44 13-4取得单元格中公式的引用单元格45 13-5将单元格中的公式转换为数值46 技巧14单元格中的批注47 14-1判断单元格是否存在批注47 14-2为单元格添加批注48 14-3删除单元格中的批注49 技巧15合并单元格操作50 15-1判断单元格区域是否存在合并单元格50 15-2合并单元格时连接每个单元格的文本51 15-3合并内容相同的连续单元格52 15-4取消合并单元格时在每个单元格中保留内容54 技巧16高亮显示单元格区域55 技巧17双击被保护单元格时不显示提示消息框56 技巧18重新计算工作表指定区域58 技巧19录入数据后单元格自动保护58 技巧20工作表事件Target参数的使用方法60 20-1使用单元格的Address 属性60 20-2使用Column属性和Row属性61 20-3使用Intersect方法61 第2章Worksheet(工作表)对象63 技巧21引用工作表的方式63 21-1使用工作表的名称63 21-2使用工作表的索引号63 21-3使用工作表的代码名称64 21-4使用ActiveSheet属性引用活动工作表64 技巧22选择工作表的方法65 技巧23遍工作表的方法66 23-1使用For...Next 语句66 23-2使用For Each...Next 语句68 技巧24在工作表中上下翻页69 技巧25工作表的添加与删除70 技巧26禁止删除指定工作表74 技巧27自动建立工作表目录76 技巧28工作表的深度隐藏78 技巧29防止更改工作表的名称80 技巧30工作表中一次插入多行81 技巧31删除工作表中的空行82 技巧32删除工作表的重复行84 技巧33定位删除特定内容所在的行86 技巧34判断是否选中整行87 技巧35限制工作表的滚动区域88 技巧36复制自动筛选后的数据区域89 技巧37使用高级筛选获得不重复记录91 技巧38工作表的保护与解除保护92 技巧39奇偶页打印95 第3章Wordbook(工作簿)对象97 技巧40工作簿的引用方法97 40-1使用工作簿的名称97 40-2使用工作簿的索引号97 40-3使用ThisWorkbook98 40-4使用ActiveWorkbook99 技巧41新建工作簿文件99 技巧42打开指定的工作簿101 技巧43判断指定工作簿是否打开104 43-1遍Workbooks集合方法104 43-2错误处理方法104 技巧44禁用宏则关闭工作簿105 技巧45关闭工作簿不显示保存对话框109 45-1使用Close方法关闭工作簿109 45-2单击工作簿关闭按钮关闭工作簿111 技巧46禁用工作簿的关闭按钮111 技巧47保存工作簿的方法113 47-1使用Save方法113 47-2直接保存为另一文件名113 47-3保存工作簿副本113 技巧48保存指定工作表为工作簿文件114 技巧49打印预览时不触发事件116 技巧50设置工作簿文档属性信息118 技巧51不打开工作簿取得其他工作簿数据119 51-1使用公式119 51-2使用GetObject函数120 51-3隐藏Application对象121 51-4使用ExecuteExcel4Macro

5,499

社区成员

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

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