我想让TreeView的每个节点对应一个文件,每双击一个节点就打开对应的文件,
如何让TreeView的每个节点保存对应的文件路径呢?
不知TreeView的节点是否有相应的属性,能保存一个字符串?
各位大侠指点一下吧,拜托了!

解决方案 »

  1.   

    Data属性,不但可以保存一个字符串,都可以保存一个Object
      

  2.   

    简单说:TTreeNode有一个Data的属性,是留给使用者保存其他信息用的,其类型是一个Pointer类型。注意:Pointer是四个字节,如果一个节点要保存更多信息只能自己开辟资源,并避免内存泄漏需要使用完后释放。
    参考如下代码:procedure TForm1.Button1Click(Sender: TObject);
    var
      vFileName: PString;
    begin
      New(vFileName);
      vFileName^ := 'c:\temp\test.dat';
      TreeView1.Items.AddObject(nil, 'Test', vFileName); // 添加
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      vFileName: PString;
    begin
      if not Assigned(TreeView1.Selected) then Exit;
      vFileName := TreeView1.Selected.Data;
      if Assigned(vFileName) then ShowMessage(vFileName^); // 读取
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      I: Integer;
      vFileName: PString;
    begin
      for I := 0 to TreeView1.Items.Count - 1 do
      begin
        vFileName := TreeView1.Items[I].Data;
        if Assigned(vFileName) then Dispose(vFileName); //释放
      end;
    end;
      

  3.   

    zswang(伴水清清)(专家门诊清洁工) ,Assigned(TreeView1.Selected)是什么意思啊,
    请指教
      

  4.   

    还是有问题,如何把TreeView1.Selected.Data的内容保存到一个String对象中去呢?
    下面这样为什么不行:(编译没问题,运行时出问题)
    var
      ps: PString;
      ss:string;
    begin
          ps:=TreeView1.Selected.Data;
          ss:=ps^;
    end;
      

  5.   

    Assigned判断数据是否有效,也就是vFileName是不是nil,如果是就返回false,不是就说明有数据返回True;zswang(伴水清清)(专家门诊清洁工)描述得很清楚了,不用我补充什么了,你的问题出错,估计你没有他
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vFileName: PString;
    begin
      New(vFileName);
      vFileName^ := 'c:\temp\test.dat';
      TreeView1.Items.AddObject(nil, 'Test', vFileName); // 添加
    end;
    这样一段
    这里 TreeView1.Items.AddObject(nil, 'Test', vFileName); // 添加中的vFileName就是data数据,你没有添加data数据,直接访问TreeView1.Selected.Data;肯定不行。
    另外是不是要来个
    if treeview1.selectioncount > 0 then
      

  6.   

    多谢楼上,我把程序改成如下就行了
    var
      ps: PChar;
      ss:string;
    begin
          ps:=TreeView1.Selected.Data;
          ss:=string(ps);
    end;还有一个小问题,如何使去掉窗口的最大化功能,是改哪个属性啊
      

  7.   

    object Form1: TForm1
      BorderIcons = [biSystemMenu, biMinimize]
    end