急、急、急:TTreeView的节点中能不能邦定多个属性? TTreeView的节点中能不能邦定多个属性,最好给出源码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 定义一个记录类型来保存各种属性,然后用节点的Data属性来保存指向该记录的指针。 Data指针可以榜定。呵呵,来晚了 可以自定义 TTreeNode 类: TMyTreeNode = class(TTreeNode) private FTag: Integer; …… public property Tag: Integer read FTag write FTag; …… end;procedure TfrmTables.tvTablesCreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);begin NodeClass := TMyTreeNode;end; 使用的时候 把 TTreeNode 转换为 TMyTreeNode 即可! 首先定义一个指针类型typePMyRec = ^TMyRec;TMyRec = record FName: string; LName: string;end;绑定指针procedure TForm1.Button1Click(Sender: TObject);var MyRecPtr: PMyRec; TreeViewIndex: LongInt;begin New(MyRecPtr); MyRecPtr^.FName := Edit1.Text; MyRecPtr^.LName := Edit2.Text; TreeViewIndex := StrToInt(Edit3.Text); with TreeView1 do begin if Items.Count = 0 then Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr) else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr); end;end;使用指针procedure TForm1.Button2Click(Sender: TObject);begin Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' + PMyRec(TreeView1.Selected.Data)^.LName;end; budded(System is bussy!) 的方法也行. to ahuige(灰不遛秋(前半身学医后半身学统计)) 呵呵,英雄所见略同嘛。^_^用mastersky(浪)的方法是比较好的,但是要记得删除节点前先Dispose相关联的指针。 如果我要实现一个的话过程是这样1:定义需要绑定的属性的record,把所有需要绑定的属性都放到这个record里面 type BindData=record PA:integer; PB:rea; PC:string; end;2:Treeview中所有的节点对象都是一个TTreeNode对象,这一个对象有一个Data属性,可以指向一个对象。通过这一个属性可以为每一个Node绑定一个delphi“对象”,在这里我们绑定为BindData类型的对象,通过这个就可以了。3:在需要属性的时候,通过Data获得所需要的数据就OK了。这其中最需要注意的就是:对象的construct&dispose操作了,一定要注意,否则会有不少的麻烦。 PMyRec((Tree as TTreeView).Selected.Data)^.FName取的不是当前节点的值,而是最后面一个节点的值是怎么回事呀? 删除节点前先Dispose相关联的指针?是怎么做呀?能给出源码吗? 在Delete之前,先Dispose(ListView.Items[Index].Data) type Pnode=^Tnode; Tnode=record dm,mc:string; end;var bb:Pnode;new(bb);bb.dm:='';bb.mc:='';self.treeview1.items.addchildObject(nil,'ddd',bb);就这样就可以了你再发挥发挥。 比较好的做法,用TList保存Treeview的Data属性指向的指针,form的destory事件中再全部释放; 我看是 budded(System is bussy!) 的做法最好省去许多释放问题 Indy TIDHttp问题请教,急 怎么通过字符选择combobox的内容 如何获得系统当前正在使用的输入法!(满意即给分决不失言) 如何写程序测试SQL服务器是否存在?急急急.... 急问题求教:关于调试 求助 为什么我用SHELLLISTVIEW组件时,双击文件时,有部分不能打开,只是隐藏在任务中运行(如TXT文件) 怎样隐含MDI主FORM? 打印时为什么总是丢掉最后一行数据? 急!!!有关于数据导入delphi数据库的问题 卖身吐血求:GIFImage.pass如何得到gif没帧的透明色?? 2个有关在intraweb中编写javascript代码的问题,很急!在线等。
private
FTag: Integer;
……
public
property Tag: Integer read FTag write FTag;
……
end;procedure TfrmTables.tvTablesCreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
NodeClass := TMyTreeNode;
end;
type
PMyRec = ^TMyRec;
TMyRec = record
FName: string;
LName: string;
end;绑定指针
procedure TForm1.Button1Click(Sender: TObject);
var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);
end;
end;使用指针
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;
呵呵,英雄所见略同嘛。^_^用mastersky(浪)的方法是比较好的,但是要记得删除节点前先Dispose相关联的指针。
1:定义需要绑定的属性的record,把所有需要绑定的属性都放到这个record里面
type BindData=record
PA:integer;
PB:rea;
PC:string;
end;
2:Treeview中所有的节点对象都是一个TTreeNode对象,这一个对象有一个Data属性,可以指向一个对象。通过这一个属性可以为每一个Node绑定一个delphi“对象”,在这里我们绑定为BindData类型的对象,通过这个就可以了。
3:在需要属性的时候,通过Data获得所需要的数据就OK了。
这其中最需要注意的就是:对象的construct&dispose操作了,一定要注意,否则会有不少的麻烦。
Pnode=^Tnode;
Tnode=record
dm,mc:string;
end;var
bb:Pnode;
new(bb);
bb.dm:='';
bb.mc:='';
self.treeview1.items.addchildObject(nil,'ddd',bb);就这样就可以了
你再发挥发挥。
省去许多释放问题