急、急、急:TTreeView的节点中能不能邦定多个属性?

时间:2020-12-28 19:08:37
TTreeView的节点中能不能邦定多个属性,最好给出源码

19 个解决方案

#1


你想做什么?

#2


可以使用Object属性。

#3


定义一个记录类型来保存各种属性,然后用节点的Data属性来保存指向该记录的指针。

#4


楼上的!!!!!
我打开贴子之前想的话
你居然说得和我想的一字不差.
我爱死你了.

#5


能否写出源码

#6


Data指针可以榜定。呵呵,来晚了

#7


可以自定义 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;

#8


使用的时候 把 TTreeNode 转换为 TMyTreeNode 即可!

#9


首先定义一个指针类型
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;

#10


budded(System is bussy!) 

的方法也行.

#11


to ahuige(灰不遛秋(前半身学医后半身学统计)) 
  呵呵,英雄所见略同嘛。^_^

用mastersky(浪)的方法是比较好的,但是要记得删除节点前先Dispose相关联的指针。

#12


如果我要实现一个的话过程是这样
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操作了,一定要注意,否则会有不少的麻烦。

#13


PMyRec((Tree as TTreeView).Selected.Data)^.FName取的不是当前节点的值,而是最后面一个节点的值是怎么回事呀?

#14


删除节点前先Dispose相关联的指针?是怎么做呀?能给出源码吗?

#15


在Delete之前,先Dispose(ListView.Items[Index].Data)

#16


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);

就这样就可以了
你再发挥发挥。

#17


up

#18


比较好的做法,用TList保存Treeview的Data属性指向的指针,form的destory事件中再全部释放;

#19


我看是 budded(System is bussy!) 的做法最好
省去许多释放问题

#1


你想做什么?

#2


可以使用Object属性。

#3


定义一个记录类型来保存各种属性,然后用节点的Data属性来保存指向该记录的指针。

#4


楼上的!!!!!
我打开贴子之前想的话
你居然说得和我想的一字不差.
我爱死你了.

#5


能否写出源码

#6


Data指针可以榜定。呵呵,来晚了

#7


可以自定义 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;

#8


使用的时候 把 TTreeNode 转换为 TMyTreeNode 即可!

#9


首先定义一个指针类型
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;

#10


budded(System is bussy!) 

的方法也行.

#11


to ahuige(灰不遛秋(前半身学医后半身学统计)) 
  呵呵,英雄所见略同嘛。^_^

用mastersky(浪)的方法是比较好的,但是要记得删除节点前先Dispose相关联的指针。

#12


如果我要实现一个的话过程是这样
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操作了,一定要注意,否则会有不少的麻烦。

#13


PMyRec((Tree as TTreeView).Selected.Data)^.FName取的不是当前节点的值,而是最后面一个节点的值是怎么回事呀?

#14


删除节点前先Dispose相关联的指针?是怎么做呀?能给出源码吗?

#15


在Delete之前,先Dispose(ListView.Items[Index].Data)

#16


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);

就这样就可以了
你再发挥发挥。

#17


up

#18


比较好的做法,用TList保存Treeview的Data属性指向的指针,form的destory事件中再全部释放;

#19


我看是 budded(System is bussy!) 的做法最好
省去许多释放问题

#20