delphi中TreeView控件使用

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DELPHI中利用TreeView控件建立目录树

2000-06-26 00:00:00·-·中国计算机报社

p>Rainbow的话:关于TreeView的使用,还可以参看:联合使用TreeView 组件

TreeView是一个显示树型结构的控件,通过它能够方便地管理和显示具有层次结构的信息,是Windows应用程序的基本控件之一。DELPHI虽然具有比较强大的文件管理功能,提供了多个用于文件管理的标准控件,如DriveComboBox、DirectoryListBox、FileListBox等,通过设置它们的属性,使其建立起联系,甚至不用编写一行程序,我们就可以实现在不同的目录之间进行切换,然而这样的目录切换只适用于进行文件的查找定位,而不能方便地进行目录的浏览,例如我们要从c:\windows目录转到c:\program files目录,就必须返回到根目录才能进行切换,而不能象Windows资源管理器那样任意地在不同的目录之间进行浏览与切换。

要实现在不同目录之间任意切换和浏览,还是需要使用TreeView控件,以下程序就利用DELPHI的TreeView控件来建立目录树。

在该程序中采用的各部件以及界面设计如下图所示:

各部件的主要属性设置如下:

部件属性属性值

form name

caption

form1 ‘目录浏览’

drivecommbobox name visible drivecommbobox1 false

filelistbox name visible filetype filelistbox1 false fddirectory

imagelist name imagelist1

treeview name images

该程序利用DriveCommboBox控件来获得系统具有的驱动器,并以此作为目录树的最上层,利用FileListBox控件,通过设置其Filetype属性为fdDirectory,可以获得所需的子目录,在TreeView控件的OnExpanding事件中将得到的子目录加到该控件的某一节点下。

整个程序的源代码如下:

unit main;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, FileCtrl, ComCtrls, ImgList;

type

TForm1 = class(TForm)

DirTreeView: TTreeView;

FileListBox1: TFileListBox;

DriveComboBox1: TDriveComboBox;

ImageList1: TImageList;

procedure FormCreate(Sender: TObject);

procedure DirTreeViewExpanding(Sender: TObject; Node: TTreeNode;var AllowExpansion: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure (Sender: TObject);

var

FirstNode,DirNode : TTreeNode;

ItemCount,Index:integer;

Itemstr:string;

begin

ItemCount:= and (itemstr 〈〉 ..) then

begin

DirNode := );

:=true;

:= 0;

:= 1;

icount:=icount+1;

end;

if icount = 0 then

:= false;

end;

end;

end;

end.

程序的运行效果如图所示:我们可以展开目录树中的任何一个节点,并且可以在任意节点之间切换,就象我们在Windows资源管理器中所作的那样,而不需要逐级回退之后才能进行切换。

Delphi中根据分类数据生成树形结构的最优方法

很多系统都有类似于如下的表结构(table1):

ID Name ParentID

---------------------------------------------------------

001 电子类0

002 金属类 0

003 电容电子 001

004 电阻电子 001

005 有色金属002

而且大家都习惯于用树(TreeView)来显示,这样就可以很好的显示整个表的分类情况。但如果数据量多时会造成树的生成比较慢,特别是用递归来实现时要访问数据库的次数很多(根据层数),用在三层中效果更加显。在此提供一个好的方法来生成树形结构。

这个算法只访问一次数据库,具体的实现如下:

1、一次性从数据库中取出所有的数据,并按照ParentID字段进行排序,这样就保证每一条数据的父节点都在它的前面。

2、取出第一条数据画到树中,在添加到树中时先找到这条数据的父节点,如果没有则将此记录直接作为树的第一级节点

3、如果还有数据,则取出来执行第2步,直到没有数据为止。

程序实现:

本程序将用一个stlID的TStringList变量来存放对应树中每一个节点的ID值,用FindParent函数来父节点。function FindParent(ID:String):TTreeNode;

var

i:Integer;

begin

result:=nil;

for i:= downto 0 do

if [i]=ID then

begin

result:=[i];

break;

end;

end;

sString),('Name').AsString);

('ID').AsString);如何初始化一个TreeView?

弄一个窗口,放上一个TreeView和一个Button,分别取名为TV1和Btn1。如果需要

在每个节点前有个图,请在窗口上放上一个ImageList,取名为ImageList1,双击

它,加入六个图标。还要记得记得将TV1的Images属性改为ImageList1噢。双击按

钮Btn1,在里面填入以下代码,然后按F9运行,点击Btn1就可以看到效果了。

procedure (Sender: TObject);

Const

MyDocDir = 'C:\My Documents';

PersonDir = '3hSoft';

Var

相关文档
最新文档