



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。一、针对TTreeNodes,也就是TreeView.Items,有这些属性:1、count,节点个数。2、itemindex,通过index得到节点。二、针对TTreeNodes,也就是TreeView.Items,常用的添加节点的操作有:AddFirst添加第一个根节点。由此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。该函数返回新添加的节点。AddChildFirst添加第一个子节点,要求有父节点作为其参数。返回新添加的节点。AddChild添加一个子节点,要求有父节点作为其参数。返回新添加的节点。Add添加一个兄弟节点,要求有兄弟节点作为其参数。返回新添加的节点。三、针对TTreeNodes,也就是TreeView.Items,常用的得到节点的操作有:GetFirstNode()得到根节点。然后配合TTreeNode.GetNext(),就可以访问所有的节点。四、建树举例:varroot_node,cur_node:TTreeNode;beginroot_node:=AddFirst(nil,根节点1);cur_node:=addChildfirst(root_node,nil,根节点1_child1);add(cur_node,根节点1_child2);root_node:=Add(nil,根节点2);AddChildFirst(root_node,根节点2_child1);end;五、事件触发:当从一个节点跳到另一个节点,会触发TTreeView.OnChange事件。该事件中,将传递node,即当前被选中的节点。当修改一个节点的text时,会触发TTreeView.onEdit事件。六、将节点和节点所对应的数据联系起来对于每个TTreeNode,有个Data属性,可以存放一个指针。我们可以利用这个域来存放与节点对应的自己的数据。1.我们先定义一个数据结构,作为记录我们要记录的数据。如:typePMyData=TMyData;TMyData=RecordsFName:string;sLName:String;nIndex:integer;end;2.然后,创建数时,将节点和节点数据联系起来:procedureTForm1.Button1Click(Sender:TObject);varmyshuju:PMyDatacur_node:TTreeNode;beginNew(MyRecPtr);/记住,一定要先分配内存。有几个节点,就要分配几次内存。myshuju.FName:=Edit1.Text;Myshuju.LName:=Edit2.Text;TreeViewIndex:=StrToInt(Edit3.Text);withTreeView1dobegincur_node:=items.AddFirst(nil,first);cur_node.data:=myshuju;end;end;3.当我们选中一个节点时,就可以使用我们的数据了。procedureTForm1.TreeView1Change(Sender:TObject;Node:TTreeNode);beginifnode.datanilthenself.label1.caption:=pmyData(node.data).Fname+pmyData(node.data).Lnameend;七、一般使用流程:1、添加全局变量:b_first:boolean;/记录是否是第一次访问节点,因为此时数据还未准备好,而一旦访问节点就会触发OnChange事件,在此事件处理函数中也许会出错。2、在FormCreate中,a、设置b_first:=true;b.创建数并将节点与数据联系。3、在FormShow中设置b_first:=false;4.在事件OnChange中处理节点被选中事件。5.在Edit中处理节点被修改Text事件。并调用OnChange.6.在TreeView.Destory中释放Data中指向的内存空间。我在写treeview的时候出现了一个小问题,我的根节点重复了,我应该怎么样去掉重复的节点呢,我在表里,有“种类”这一个字段,和一个“种类内容”一个字段,我是想如里在种类里输入与表中有相同的种类的内容,然后在种类内容里输入别的名称,在treeview里就只显示一个种类的根节点,然后在把那条重复的记录里的“种类内容”里的内容加到“种类”这个根节点下,这是我的代码:请看看怎么样改可以:unitTREEUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ComCtrls,Grids,DBGrids,DB,ADODB;typeTTREEForm=class(TForm)TreeView1:TTreeView;DBTREEGrid:TDBGrid;ADOTREETable:TADOTable;ADOTREENODE20Query:TADOQuery;DataTREESource:TDataSource;ADOTREENODE21Query:TADOQuery;procedureFormShow(Sender:TObject);privatePrivatedeclarationspublicPublicdeclarationsend;varTREEForm:TTREEForm;node1,node2:ttreenode;/定义节点aa:string;implementationusesMAINUnit1;$R*.dfmprocedureTTREEForm.FormShow(Sender:TObject);begin/在TREEVIEW里列出信息withADOTREENODE20QuerydobeginClose;SQl.Clear;SQL.Add(select*fromtreenrorderby种类);Open;end;ADOTREENODE20Query.First;/从第一条记录开始whilenotADOTREENODE20Query.Eofdobegin/selectdistinct种类fromtreenr/添加根节点node2:=TreeView1.Items.Add(node1,ADOTREENODE20Query.FieldValues种类);withADOTREENODE21QuerydobeginClose;SQl.Clear;SQL.Add(select种类,种类编号,种类内容fromtreenrwhere种类=:zl);Parameters.ParamByName(zl).Value:=ADOTREENODE20Query.FieldByName(种类).AsString;Open;end;ADOTREENODE21Query.First;/从第一条记录开始whilenotADOTREENODE21Query.Eofdobegin/node2.ImageIndex:=1;/添加子节点TreeView1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论