问一个比较菜的问题,关于副本的建立。(100分)

  • 主题发起人 主题发起人 zbird
  • 开始时间 开始时间
Z

zbird

Unregistered / Unconfirmed
GUEST, unregistred user!
问一个比较菜的问题,关于副本的建立。

在对TListView编程时,
有如下代码。
procedure TForm1.Button2Click(Sender: TObject);
var
listitems:tlistitems;
begin
listitems:=ListView1.Items;
ListView1.Clear;
ListView1.Items:=Listitems;
end;
代码的本意是将ListView1.Items保存在listitems中,在清空后恢复。
可是我们可以看到ListView1没有被恢复。
原因是没有为listitems建立副本。
他们都指向了同一个地址。
对他们两者的操作都会改变对方。

我到底要怎样做才能为他建立副本呢?
 
procedure TForm1.Button2Click(Sender: TObject);
var
listitems:tlistitems;
begin
listitems.Assign(ListView1.Items);
ListView1.Clear;
ListView1.Items:=Listitems;
end;
 
老大,

listitems.Assign(ListView1.Items);
出错。
 
我又看了下,
好象是因为listitems没有create。
那我要怎样指定listitems的owner呢?
 
想通过复制ListItems或ListItem对象对其备份是不现实的(察看TListView的VCL源码就知道了)
所以要想恢复只能从新Add一遍
 
难道没有什么方法可以备份ListItem吗?
 
你声明一个与tlistitem一样结构的记录就可以把它保存下来,这不
就是做了一个备份吗,需要的时候再复制回去,
 
同意,用assign
 
可关键是tlistitem要怎么建立呢?
如果不create的话,
肯定要出错。
但如果要create的话,
那怎么指定他的owner呢?
难道要再建立个tlistview?!
 
ListView2:= TlistView1.Create(form1);
ListView2.assign(ListView1)
......
.....
.....
ListView2.free
 
直接复制listview,不要复制ITEM
 
但listview是可视控件啊,
难道我要建立后将他隐藏吗?
 
的确要隐藏,我以前就干过类似的“勾当”
 
我最后还是用了和太阳鸟相类似的方法,
只不过控件是在设计阶段就添加并隐藏的。
不知道还有没有更好的方法,
不过还是先节贴吧。
 
晕!!!!我是太阳"火",不是太阳"鸟"
 
主要是楼主觉得太阳的火太猛了,不忍心放在你身上。。。。
 
后退
顶部