1.物料文件表:编号,名称,  
2.物料清单表:父项编号,编号,数量
我的问题如下:
   pnode1:=treeview1.Items.Item[i-1];
     if pnode1.text =pname then
       begin
       //创建子节点
       pnode:=treeview1.Items.AddChild(pnode1,name);
这样的话,如果有同样名称的而编号不同的物料显示出来就可能会出现错误的显示。
问题如下:如果我改为
       pnode1:=treeview1.Items.Item[i-1];
     if pnode1.Data =pcode then
       begin
       //创建子节点
       pnode:=treeview1.Items.AddChild(pnode1,name);
这样的话,它就提示出现错误,请问如何改用data的方法是不会出错呀?谢谢……

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject); //给节点一个指针的记录类型。记录编号
    var
      i:integer;
      p:^string;
    begin
      for i := 0 to 2 do
      begin
        new(p);
        p^:=inttostr(i);
        treeview1.Items.AddObject(nil,'我爱你',p);
      end;
    end;procedure TForm1.TreeView1DblClick(Sender: TObject);//双击的时候显示编号
    var
      p:^string;
    begin
      p:=TreeView1.Selected.Data;
      showmessage(p^);
    end;记得在关闭窗体、清空树或重新生成树的时候将节点的指针记录类型的内存给释放掉。
    procedure TForm1.cleartree(tree: TTreeview);
    var
      i:integer;
    begin
      for  i:=0 to tree.Items.Count-1 do
      begin
        if tree.Items[i].Data<>nil then
          Dispose(tree.Items[i].Data);
      end;
      tree.Items.Clear;
    end;
      

  2.   

    type
       PSort = ^TPSort;
       TPSort = record
         id: integer;
         Sort:String;
       end;//循环(我没有用,是测试)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Sort : PSort;
      node : TTreeNode;
    begin
        new(Sort);
        Sort.id :=1;
        Sort.Sort :='文件';
        with treeView1.Items do
        begin
          node := addchild(nil,sort.Sort);
          node.Data := sort;
        end;
        new(sort);
        Sort.id :=2;
        Sort.Sort :='资料';
        with treeView1.Items do
        begin
          node := addchild(nil,sort.Sort);
          node.Data := sort;
        end;
    end;//显示物料名
    procedure TForm1.treeview1DblClick(Sender: TObject);
    var
      sort:pSort;
    begin
      New(sort);
      sort := TreeView1.Selected.Data;
      showmessage(sort.Sort);
    end;增加子项时,根据父的sort.id来进行判断就可以了。
    你可以试一下。
      

  3.   

    type
       PSort = ^TPSort;  //写在这里总是出错:unexpected token: PSort
       TPSort = record
         id: integer;
         Sort:String;
       end;
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;
    type
       PSort = ^TPSort;
       TPSort = record
         id: integer;
         Sort:String;
       end;
    type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        ListBox1: TListBox;
        procedure TreeView1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1Click(Sender: TObject);
    var
      sort:pSort;
    begin
      New(sort);
      sort := TreeView1.Selected.Data;
      showmessage(sort.Sort+'  '+inttostr(sort.id));
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      Sort : PSort;
      node : TTreeNode;
    begin
        new(Sort);
        Sort.id :=1;
        Sort.Sort :='文件';
        with treeView1.Items do
        begin
          node := addchild(nil,sort.Sort);
          node.Data := sort;
        end;
        new(sort);
        Sort.id :=2;
        Sort.Sort :='资料';
        with treeView1.Items do
        begin
          node := addchild(nil,sort.Sort);
          node.Data := sort;
        end;
    end;end.
      

  5.   

    procedure TForm1.TreeView1Click(Sender: TObject);
    var
      sort:pSort;
    begin
      New(sort);
      sort := TreeView1.Selected.Data;
      showmessage(sort.Sort+'  '+inttostr(sort.id));  //为什么我这里显示出来都是树形同一层的最后一个结点的值????
    end;
    为什么?