我用ListView的Item.Data存放了一个类的对象,该对象还有成员类......我直接用流保存了ListView组件到文件,关闭程序,再读取文件,发现我原先存入Data里面的对象信息都消失了,变成了初始值...........。我的Item.Data里面的类继承至TPersistent,据说胜过伟哥,具有永久保持能力......搞了好久.......就是一直无法得到原先我存入Data里面对象的信息!

解决方案 »

  1.   

    看一下ListView的SaveToStream的源码。。
    并不像你想象的那么完美
      

  2.   

    你如果搞清楚ListView的Item.Data其实存放的是一个指针,那么一切都清楚了。通过指针去访问内存中的数据。你要保证访问的数据未被释放,所以这个数据要么是一个全局变量,要么用New函数来声明一段内存放数据,并且当你不需要这段数据时,通过Dispose函数取释放内存。
    如果你还没弄清楚什么是指针,那么不要用ListView的Item.Data,会害死你的。
      

  3.   

    我知道Item.Data是个指针类型,我可以开辟内存空间,给他存放地址和内容..........但是为什么,我从文件读取该组件时候,能查看Data的地址与原先赋值一样,而且还能得到置入对象的初始值..................我就不太明白了...........
    那么,我该如何才能智能一些保存该Data里面的对象信息.......
    不会是傻到遍历读取Data里面内容,再存入流吧............
      

  4.   

    而且申明一点,我保存组件的时候并不是用ListView的方法,而是创建内存流,用流的组件读取方法,去保存的。
    重启程序,读文件的时候竟然可以初始化原来的Data里面的类实例以及成员类实例.......就是没有保存原来存入的实例信息。
      

  5.   

    你既然知道ListView的Item.Data只保存了指针,那我问你,单靠一个指针你能访问什么?你直接用流保存了ListView组件到文件,有没保存指针指向的数据内容?没有是不是。