如何使用TREEVIEW 控件(50分)

  • 主题发起人 主题发起人 flay
  • 开始时间 开始时间
F

flay

Unregistered / Unconfirmed
GUEST, unregistred user!
TREEVIEW 控件很有用,我却不知道怎样用,高手帮忙!最好有代码和使用的说明,谢谢了!!
 
faint,...,
1.双击它,添加几个item
 
把它扔到FORM上,然后双击,打
TreeView.
^
这个句号是关键
 
Treeview虽好但要编程实现太烦琐
还是用用1stClass或dx中的这种类型的控件吧
里面是有例子的 自己慢慢研究
 
建立一个文本文件,用 Tab 缩进,如以下:

AAAAAAAA
BBBBBBB
VCCCCCCCC
DDDDDD
EEEEEEE
FFFFFFF

在 From 中放一个 TreeView

在 按钮点击事件中加以下语句,看效果:
Treeview1.loadFromFile('MyTree.txt');
 
赚点分: 来自 lid=0666546 [:)]
------------------
卷起千堆雪tyn (2001-10-11 14:05:00)
Treeview用于显示按照树形结构进行组织的数据。

Treeview控件中一个树形图由节点(TreeNode)和连接线组成。TtreeNode是TTreeview的基本组成单元。
一个树的节点又包含文本(Text)和数据(Data)。Text为String类,Data则为无定形指针(Untyped Pointer),
可以指向一个与节点相联系的数据结构。
  
每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),
用于说明子节点在Items中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。
用IndexOf方法获得子节点的顺序,绝对顺序(AbsoluteIndex)则是指从Treeview第一个项开始的顺序值,
第一个是0,如此推下去。Item属性则根据Index的值返回当前节点的第Index个子节点。Count则表明属于
此项的所有子节点的数量。用MoveTo方法将Item由一个位置移到另一个位置。

Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。
IsVisible属性表明一个项是否在树中能被看到,如果树全部展开那么这个Item是肯定可以
被看到。

HasChildren属性表明一个项是否有子项。 GetFirstChild, GetLastChild, GetPrevChild,
and GetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。

GetNextSibling and GetPrevSibling则返回在同一Level下的下一个和上一个项。
GetNextVisible and GetPrevVisible则返回能看得到的下一个和上一个项。如果一个节点
有Parent,则HasAsParent方法返回True. Parent为当前项的父项。Focused属性确定焦点是
否落在此节点上,被Focus时会一个标准的方框围住。很显然,只有一个节点会被聚焦。

Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。

DropTarget属性表明节点在拖动操作中是源还是目标。

.1.添加、删除、修改节点:
静态的方法可以在设计时通过Items的编辑器设置各节点的内容。
在添加和删除前必须保证有节点被选中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根节点,如Treeview.Items.AddFirst( nil, 'Root');
然后以此为基础,添加此项的子节点。

删除节点
Treeview.Selected.Delete

编辑节点内容
Treeview.Selected.EditText

注意:由于根节点没有父节点 (TTreeNode.Parent= nil)
此外,在大批量添加数据到Treeview中时最好使用
  TreeView.Items.BeginUpdate;
  添加节点
  TreeView.Items.EndUpdate
这样能加快显示速度。

2.在节点上添加图象
Treeview中几个与图象相关的属性:
  SelectedIndex:当节点被选中时在TimageList 中选什么样的图象
  OverlayIndex:选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),
比如一个节点不可用时加一副X图象在其前面。
  ImageIndex:在常态时选用的图的序号
  StateIndex: 在StateImages这个ImageList中对应的序号,-1时不显示图象
  比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以
显示图象。在Form中放置一ImageList控件,加入几个图片,分别被Index为0,1,…
在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的ImageIndex
表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。

3.关于Level
Level的概念可以用下图表示:
Level0   Level1 Level2

4.排序
SortType决定什么时候进行排序;
TreeView.AlphaSort对节点进行排序,如果不能满足要求,你可以定义自己的CustomSort方法。

5.Drag&Drop操作,与标准的拖放操作使用方法一样
 
谁有具体的例子,很小的就可以能够说明问题就可以了!!谢谢
 
這樣的樹形結構怎麼實現:
+一級部門
+二級部門
-張三
-李四
(要關聯數據表)
 
这里有一例,大家分析一下应会明白。
unit Treeview;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls;
type
PData=^P;
P=record
MyData:String;
end;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure TreeView1Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
td:TTreeNode;
dt:PData;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
td:=Treeview1.Items.Add(nil,'学生信息');
td.HasChildren:=true;
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
td1,td2:TTreeNode;
i:integer;
begin
with ADOQuery1 do
begin
close;
Sql.Clear;
case Treeview1.Selected.Level of
0:Sql.Add('select xb,xb_id from xb');
1:Sql.Add('select zy,zy_id from zy where xb_id='''+PData(Treeview1.Selected.Data)^.MyData+'''');
end;
open;
end;
case Treeview1.Selected.Level of
0:
for i:=1 to ADOQuery1.RecordCount do
begin
new(dt);//无此句会出现读地址错.
td:=Treeview1.Items.AddChild(Treeview1.Selected,ADOQuery1.FieldValues['xb']);
dt.MyData:=ADOQuery1.FieldByName('xb_id').AsString;
td.Data:=dt;
td.HasChildren:=true;
ADOQuery1.next;
end;
1:
for i:=1 to ADOQuery1.RecordCount do
begin
td:=Treeview1.Items.AddChild(Treeview1.Selected,ADOQuery1.FieldValues['zy']);
dt.MyData:=ADOQuery1.FieldByName('zy_id').AsString;
td.Data:=dt;
ADOQuery1.next;
end;
end;
end;

procedure TForm1.TreeView1Collapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
begin
Treeview1.Selected.DeleteChildren;
Treeview1.Selected.HasChildren:=true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOQuery1.Close;
end;

end.
 
后退
顶部