用递归方法,使用 xml 文档生成 Treeview 树形视图。由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,
从而实现了 xml 对 Treeview 的动态配置,而不用修改代码。
xml 文件如下:
<?xml version="1.0" encoding="gb2312"?>
<root topic="频道列表" catalog="none">
<channel topic="操作系统" catalog="none">
<channel topic="Windows频道" catalog="windows" />
<channel topic="DOS频道" catalog="dos" />
<channel topic="Linux" catalog="linux" />
</channel>
<channel topic="菜鸟专区" catalog="cainiaozhuanqu" />
<channel topic="应用软件" catalog="app" />
<channel topic="安全专区" catalog="safe" />
<channel topic="代码实验室" catalog="lab" />
<BBS topic="电脑学习社区" catalog="none">
<subBBS topic="子社区-1" catalog="sub1" />
<subBBS topic="子社区-2" catalog="sub2" />
</BBS>
</root>
程序代码如下:
unit tree_xml;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, ComCtrls, StdCtrls, XMLDoc, XMLIntf;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Memo1: TMemo;
Button1: TButton;
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
private
procedure CreateTreeview(XmlNode: IXMLNode; TreeNode: TTreeNode);
{ Private declarations }
public
{ Public declarations }
end;
type
pRec = ^TData;
TData = record
sCatalog: string;
sReserved: String
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateTreeview(XmlNode: IXMLNode; TreeNode: TTreeNode);
var
i: integer;
ParentTreeNode, CurrentTreeNode: TTreeNode;
pData: pRec;
begin
New(pData);
pData^.sCatalog := XmlNode.AttributeNodes['catalog'].NodeValue;
CurrentTreeNode := TreeView1.Items.AddChildObject(TreeNode,
XmlNode.AttributeNodes['topic'].NodeValue, pData); //pointer(...)
if XmlNode.HasChildNodes then
begin
ParentTreeNode := CurrentTreeNode;
for i:=0 to XmlNode.ChildNodes.Count-1 do
begin
CreateTreeview(XmlNode.ChildNodes[i], ParentTreeNode);
end;
end;
end;
{------------------------------------------------------------------}
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var pData: pRec;
begin
pData := Treeview1.Selected.Data;
Memo1.Lines.Add(pData^.sCatalog);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
oXml: TXMLDocument;
begin
oXml := TXMLDocument.Create(self);
oXml.FileName := '_Treeview.xml';
oXml.Active:=true;
CreateTreeview(oXml.ChildNodes.FindNode('root'), Treeview1.Items.GetFirstNode);
Treeview1.FullExpand; //节点全部展开
oXml.Free;
end;
end.
注意程序中 Treeview 的 TreeView1.Items.AddChildObject 方法,其最后一个参数用来保存该节点的相关数据,是一个指针类型的数据,使用时要格外小心。本例中,先定义一个记录类型,再定义一个指针指向它,然后作为 AddChildObject 的最后一个参数。记录类型可以保存节点的很多相关参数,本例中只用到了一个,实际使用时可以任意扩充。
---“十万个为什么”电脑学习网-http://www.why100000.com-原创文章
张庆(网眼)2007-10-22
分享到:
相关推荐
delphi中用 Xml 配置文档生成 Treeview
delphi xml生成树TreeView
根据xml动态生成treeview,并可对节点进行删除、添加、编辑
读入XML文件生成TreeView,并在树的每个节点加上CheckBox ,主要是在做一个flex的项目时遇到的问题,先提供出来供大家分享
1.通过xml文件绑定treeview 2.通过动态生成xml文件绑定treeview 3.代码动态生成treeview节点 vs2008的项目 在vs2005下删除 usingSystem.Xml.Linq; 就可以使用
由XML生成treeview节点,稍加修改即可运行
Delphi树形菜单类以及例子,结合数据库生成Treeview树控菜单视图,你可了解下如何按照节点在数据库中的编号查找节点、如何查找节点在数据库中的数据、填充节点等。这个类通过数据库中的数据自动添加到Treeview控件中...
C#TreeView控件转存XML加载XML利用Helper 此窗体有两个TreeView 一键复制TreeView1 到 TreeView2 而且保留tree1中的的image 存储xml 加载xml 清除node 加载treeview 用到了tag,selectimage等参数
根据xml生成一个treeview,可以复选treeview里的节点,希望对大家有所帮助
delphi自定义控件_treeview控件加强 Tmytreeview 对treeview控件加强 实现增删改及拖拽操作
给出3段代码,分别是TreeView2XML、XML2TreeView和TreeView2MenuStrip。 //将TreeView保存到XML文件中 //从XML中读取数据到TreeView //根据TreeView生成层次结构的菜单 值得下载。
delphi treeview 加载时 改变字体颜色
将treeView序列化Xml文件示例,C# 编写。
WinForm 中TreeView <=> XML 例子代码 ,给出3段代码,分别是TreeView2XML、XML2TreeView和TreeView2MenuStrip。
C#关于xml文件和TreeView之间的转换解析,XML格式文件转TreeView,TreeNode、
实现读取xml文件并在treeview上显示并添加修改删除节点
delphi 用TreeView实现文件树 demo
根据SQL生成TreeView以及Treeview的节点选择等等.
把盘符下的文件全部遍历出来,然后生成TreeView,TreeNode给设计出来,首先找到根目录,根目录下又有子目录,然后在到文件。TreeNode是根据这个层次关系显示出来的。
自定义TreeView控件,通过递归地方式实现显示xml文件,可以通过右键增加兄弟节点、子节点,并且可以删除结点,可以用来学习如何手工绑定数据到TreeView控件中