在TreeView中为结点Ttreenode的Data属性赋值node.data:=PChar('字符串'),但再取data属性的值时有的结点能取到值,有的结点取为空,很奇怪,我的确为每一个结点的data属性都赋值了。

解决方案 »

  1.   

    这么做肯定是错误的。
    对于指针来说,你必须要分配内存。并且必须要释放内存。因此你的实现方法应当如下
    var
      p: Pchar;
    begin
      GetMem(p,20);
      p^:='ABCDED';
      Node.Data:=p
    end;注意,里面不能写:
    s:='abcdefg';
    p:=Pchar(s);
    因为这句的意思是把p指向s的位置。而如果s是一个局域变量的话他是会自动释放的,回头释放后你的指针就不知道跑到哪里了。因此你可能数据就会错误。或者为空。我估计你的问题也是这个原因造成的。
    另外,释放内存在TreeView的OnDeletion事件中写:
    procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
    begin
      FreeMem(Node.Data,20);
    end