请举例说明 treeview的Node.data相当于n个node.text这种属性?

解决方案 »

  1.   

    给你一段源码:
      goods=record
         id:string;
         prod_code   :string;
         .......
         create_date :string;
      end;  P_goods=^goods;//定义一个数据类型procedure TForm1.TVChanging(Sender: TObject;
      Node: TTreeNode; var AllowChange: Boolean);
    var
       goods_tmp :p_goods;
    begin
       goods_tmp:=tv.selected.data;
       label1.caption:=goods_tmp^.id;
       ......
    end;
      

  2.   

    上面的程序有问题!!!
    1、没有分配内存
    2、结构的大小是动态的,无法明确确定大小,导致不能正确分配内存。一般的步骤如下:
    1、在增加新节点的时候,对接点的Data进行赋值,注意不要忘记申请内存。
    2、在访问的时候可以通过上面的代码进行操作。
      

  3.   

    用鼠标全选,然后在2米远处看看!
    .............................,,,.,,,,,,,,,,,.....,.:::;;:::;:::::::::::::::::::
    ...........................,.,::,,,::,,,,,,,,....,.,:;::::::::::::::::::::::::;
    .......................,,,,,,,=;;,,:::::,,,,,.....,,,::::;::;:::::::::::::;;;;;
    ....................,.,:::::,:;+++:;=;;;:,,,,.......,:::::;;;;;::::::::;;;;;;;;
    ..................,,,,:;,;::;:=+tt;==;:::,,,,,...:==,,::;::;;:;:::;;;;;;;;;;;;;
    ...................,:;;::;==+=+t=;;;;=iiii+iit;,,,==t,:;;;;;;;;;;;;;;;;;;;;;;;;
    ..................,:===;=iitttt+++ii=;==;=tIYIt;;=itt;,:;;;;;;;:;;;;:;;;;;;::;;
    ..................,:;==itIYXXYYYYt+:,,=t+=tYVYYt===+Ii,,::;:::::::;;;;;;;;;:;::
    ...............,;;;+ttIYYVXRRXYVVitIIIYXXVXXXVYYi+=tII,,,::;;;::;::;;;;;:;:::::
    ..............,,,..:i=iYYVXRBRVYVXRRRRBBBMMBRXVYtiIII;,,,,::::;;;;;;;;:;;;;::::
    ............,,,=+;=ittIXXXXXRRXVXXXRRBBMMMMMBRXVYItY=.,,,,,,::::;;::;:;;;;;;:::
    ...........:==+tVXXXXRRRRRRXRBBXXXXRBBMMMMWMMRXVYt=:,,,,,,,,,::::::::::::::::::
    ..........:itYVRBBBBBBBBBBRXXBBBXVVVVXMMWWWWBRXVYI:,,,,,,,,,,,:::::::::::::::::
    ..........+IVXRBMMMBMBMMBRXXXBMMMRYVVVRMMMMMBRXVVY:;..,,,,,,,,,::::::::::::::::
    ..........;IYXXRBMMMMMMMRXXXVYXXVVIYXXRRRRBBBRXVVY;,:.,,:,.,,,,,:::::::::::::::
    ...........=IYVXRBBMWWMBRRBRXRBRRRBRXVVYYVRBBXXVYI,,=,;i.;,,,,,,,::::::::::::::
    ............;tYYVXRBBBBRRBRBRXVYYItIIt+:iXBBBXVVY=;;i=Yi.,:,,,,,,,,,::::::::,,,
    .............,tYYVVXXRRXRXYi+itXRXRXIt+tYRRRRVVY=,i=..:,,,.,,,,,,,,,,,:::,,,,,,
    ...............iYYVVXRRRRXXYIiitttttIYIIXRRXXYI;,,....,,.,,,,,,,,,,,,,,::,,,,,,
    ................,+IVVXXRRBRBRRXYYYYYYVXRBBRXYt:,,...,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ..............,....:iIYVXRRRBBBBMBBBBBMMMBXY=:,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ..............,=.......;+tYVXRBMMMWWWMMBXVt;::,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,
    ............................:;itIYYYYYItti=;;:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
      

  4.   


    用鼠标全选,然后在2米远处看看!
    .............................,,,.,,,,,,,,,,,.....,.:::;;:::;::::::::::::::::::
    ...........................,.,::,,,::,,,,,,,,....,.,:;:::::::::::::::::::::::;
    .......................,,,,,,,=;;,,:::::,,,,,.....,,,::::;::;:::::::::::::;;;;
    ....................,.,:::::,:;+++:;=;;;:,,,,.......,:::::;;;;;::::::::;;;;;;;
    ..................,,,,:;,;::;:=+tt;==;:::,,,,,...:==,,::;::;;:;:::;;;;;;;;;;;;
    ...................,:;;::;==+=+t=;;;;=iiii+iit;,,,==t,:;;;;;;;;;;;;;;;;;;;;;;;
    ..................,:===;=iitttt+++ii=;==;=tIYIt;;=itt;,:;;;;;;;:;;;;:;;;;;;::;
    ..................,:;==itIYXXYYYYt+:,,=t+=tYVYYt===+Ii,,::;:::::::;;;;;;;;;:;:
    ...............,;;;+ttIYYVXRRXYVVitIIIYXXVXXXVYYi+=tII,,,::;;;::;::;;;;;:;::::
    ..............,,,..:i=iYYVXRBRVYVXRRRRBBBMMBRXVYtiIII;,,,,::::;;;;;;;;:;;;;:::
    ............,,,=+;=ittIXXXXXRRXVXXXRRBBMMMMMBRXVYItY=.,,,,,,::::;;::;:;;;;;;::
    ...........:==+tVXXXXRRRRRRXRBBXXXXRBBMMMMWMMRXVYt=:,,,,,,,,,:::::::::::::::::
    ..........:itYVRBBBBBBBBBBRXXBBBXVVVVXMMWWWWBRXVYI:,,,,,,,,,,,::::::::::::::::
    ..........+IVXRBMMMBMBMMBRXXXBMMMRYVVVRMMMMMBRXVVY:;..,,,,,,,,,:::::::::::::::
    ..........;IYXXRBMMMMMMMRXXXVYXXVVIYXXRRRRBBBRXVVY;,:.,,:,.,,,,,::::::::::::::
    ...........=IYVXRBBMWWMBRRBRXRBRRRBRXVVYYVRBBXXVYI,,=,;i.;,,,,,,,:::::::::::::
    ............;tYYVXRBBBBRRBRBRXVYYItIIt+:iXBBBXVVY=;;i=Yi.,:,,,,,,,,,::::::::,,
    .............,tYYVVXXRRXRXYi+itXRXRXIt+tYRRRRVVY=,i=..:,,,.,,,,,,,,,,,:::,,,,,
    ...............iYYVVXRRRRXXYIiitttttIYIIXRRXXYI;,,....,,.,,,,,,,,,,,,,,::,,,,,
    ................,+IVVXXRRBRBRRXYYYYYYVXRBBRXYt:,,...,,,,,,,,,,,,,,,,,,,,,,,,,,
    ..............,....:iIYVXRRRBBBBMBBBBBMMMBXY=:,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,
    ..............,=.......;+tYVXRBMMMWWWMMBXVt;::,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,
    ............................:;itIYYYYYItti=;;:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
      

  5.   

    node.data是一个指针,只要定义一个数据结构,每次用new申请空间。就可以用了,数据结构可以是各种类型的,所以很方便在树的节点上附加很多信息。
      

  6.   

    goods=record
         id:string;
         prod_code   :string;
         .......
         create_date :string;
      end;  P_goods=^goods;//定义一个数据类型procedure TForm1.TVChanging(Sender: TObject;
      Node: TTreeNode; var AllowChange: Boolean);
    var
       goods_tmp :p_goods;
    begin
       goods_tmp:=tv.selected.data;
       edit1.text:=goods_tmp^.id;
       edit2.text:=goods_tmp^.prod_code
       ......
    end;
    procedure TForm1.TVDeletion(Sender: TObject; Node: TTreeNode);
    begin
      Dispose(P_goods(Node.Data));//释放
    end;
      

  7.   

    procedure TForm1.(Sender: TObject);
    var
      addNode:ttreenode;
      goods_tmp:p_goods;
    begin
      addNode := TreeView1.Items.AddChild(nil,'一个结点');
      New(gosds_tmp);
      goods_tmp^.id:= '8035';
      oods_tmp^.prod_code:= 'sdkfjsld';
      addNode.Data:=goods_tmp;
    end;
      

  8.   

    goods=record
         id:string;
         prod_code   :string;
         .......
         create_date :string;
      end;  P_goods=^goods;//定义一个数据类型
      goods_tmp:p_goods;
    procedure TForm1.TVChanging(Sender: TObject;
      Node: TTreeNode; var AllowChange: Boolean);
    begin
       goods_tmp:=tv.selected.data;
       edit1.text:=goods_tmp^.id;
       edit2.text:=goods_tmp^.prod_code
       ......
    end;
    procedure TForm1.TVDeletion(Sender: TObject; Node: TTreeNode);
    begin
      Dispose(P_goods(Node.Data));//释放
    end;
    procedure TForm1.addnodemu(Sender: TObject);
    var
      addNode:ttreenode;
    begin
      addNode := TreeView1.Items.AddChild(nil,'一个结点');
      New(goods_tmp);
      goods_tmp^.id:= '8035';
      oods_tmp^.prod_code:= 'sdkfjsld';
      addNode.Data:=goods_tmp;
    end;
      

  9.   

    本人做过这样一个程序,生成tree的例子,发现d5的tree有bug,我其实在
    原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
    我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
    type
      TForm1 = class(TForm)
        tree: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
            Mypoint=^TMypoint;
            TMypoint=record
            id:string;
    end;
    var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);   //正向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);for i:=0 to 9 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
    end;for i:=0 to 9 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    iss:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;procedure TForm1.Button2Click(Sender: TObject);  //反向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);
    for i:=0 to rx-1 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
    for i:=rx-1 downto 0 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;
    end.************
    * 努力学习 *
    *   全为   *
    *¥人民币¥*
    ************
      

  10.   

    本人做过这样一个程序,生成tree的例子,发现d5的tree有bug,我其实在
    原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
    我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。
    楼上说的对因该在展开时建立,但是如果用d5那么如果最后面的那个在展开时建立也要好久的,建议改用d6unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
    type
      TForm1 = class(TForm)
        tree: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
            Mypoint=^TMypoint;
            TMypoint=record
            id:string;
    end;
    var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);   //正向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);for i:=0 to 9 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
    end;for i:=0 to 9 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    iss:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;procedure TForm1.Button2Click(Sender: TObject);  //反向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);
    for i:=0 to rx-1 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
    for i:=rx-1 downto 0 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;
    end.************
    * 努力学习 *
    *   全为   *
    *¥人民币¥*
    ************
      

  11.   

    本人做过这样一个程序,生成tree的例子,发现d5的tree有bug,我其实在
    原来发过这个贴子,大家测试过后有的说有,有的说没有,后来我在d6下面用发现没有这个问题
    我下面程序建立tree采用了两种方法一种正向和反向建立两个方法的时间不同。(测试环境d5)d6生成tree很快的。
    楼上说的对因该在展开时建立,但是如果用d5那么如果最后面的那个在展开时建立也要好久的,建议改用d6unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ComCtrls;
    type
      TForm1 = class(TForm)
        tree: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    type
            Mypoint=^TMypoint;
            TMypoint=record
            id:string;
    end;
    var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);   //正向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);for i:=0 to 9 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);
    end;for i:=0 to 9 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    iss:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;procedure TForm1.Button2Click(Sender: TObject);  //反向建立tree
    var iss,ie,j,i,rx:integer;
    htm:mypoint;
    one:array of TTreeNode;
    begin
    tree.Items.Clear;
    iss:=gettickcount();
    rx:=10;
    setlength(one,rx);
    for i:=0 to rx-1 do
    begin
            new(htm);
            htm.id:=inttostr(i);
            one[i]:=tree.Items.AddObject(nil,inttostr(i),htm);end;
    for i:=rx-1 downto 0 do
    for j:=1 to 50 do
                    begin
                        new(htm);
                        htm.id:=inttostr(j);
                        tree.Items.AddChildObject(one[i],inttostr(j),htm);
                    end;
    ie:=gettickcount();
    showmessage(floattostr((ie-iss)/1000.0)+'秒');
    end;
    end.************
    * 努力学习 *
    *   全为   *
    *¥人民币¥*
    ************