我有一个表单,其中包含一个ListView和按钮,用于添加/编辑/删除此列表中的项目。它有一个保存&取消按钮。按下取消按钮,我想还原当前表单中已完成的所有更改。因此,在加载表单时,我会保留原始列表的副本,如下所示。
backupMyListView = MyListView
在取消按钮代码中,我反其道而行之。
MyListView = refMyListView
发生的事情是,原始列表视图永远不会恢复,因为每次更新MyListView时,backupMyListView也会更新。
如何在按取消按钮时恢复原始ListView?
答案 0 :(得分:2)
两个列表显然都引用了相同的列表。
您基本上需要克隆或复制对象:
Dim backupMyListView As New ListView
For Each lv As ListViewItem In MyListView.Items
backupMyListView.Items.Add(lv.Clone)
Next
答案 1 :(得分:1)
您需要研究值类型和引用类型之间的区别。将变量设置为另一个变量的值时,如果该值是对象的值类型(TypeDef结构),则它仅复制数据。当值是对象的引用类型(类)时,它只是对同一对象进行另一个引用。因此,如果您创建一个新的ListView对象(引用类型)并为其设置两个不同的变量,它们都将指向同一个对象。通过一个变量进行的任何更改也会影响另一个变量。要制作数据副本,您需要使用克隆方法。
答案 2 :(得分:1)
喜欢这个:
Private List<ListViewItem> ListViewStore As New List<ListViewItem>;
Sub Backup()
For Each ListViewItem LItem in MyListView.Items
ListViewStore.Add(LItem.Clone)
Next
End Sub