1

我有一个表单,它有一个 ListView 和按钮来从这个列表中添加/编辑/删除项目。它有一个保存和一个取消按钮。在按下取消按钮时,我想恢复在当前表单中所做的所有更改。因此,在加载表单时,我会保留一份原始列表的副本,如下所示。

backupMyListView = MyListView

在取消按钮代码中,我做相反的事情。

MyListView = refMyListView

发生的事情是,原始列表视图永远不会恢复,因为每次更新 MyListView 时,backupMyListView 也会更新。

如何在按下取消按钮时恢复原始 ListView?

4

3 回答 3

2

这两个列表显然都引用了同一个列表。

您基本上需要克隆或复制对象:

Dim backupMyListView As New ListView
For Each lv As ListViewItem In MyListView.Items
  backupMyListView.Items.Add(lv.Clone)
Next
于 2012-05-12T13:27:38.150 回答
1

您需要研究值类型和引用类型之间的区别。当您将一个变量设置为另一个变量的值时,如果该值是对象的值类型(TypeDef 结构),它只会复制数据。当值是对象(类)的引用类型时,它只是对同一对象进行另一个引用。因此,如果您创建一个新的 ListView 对象(引用类型)并为其设置两个不同的变量,它们将都指向同一个对象。通过一个变量所做的任何更改也会影响另一个变量。要复制数据,您需要使用 Clone 方法。

于 2012-05-12T13:45:25.600 回答
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
于 2012-05-13T03:03:14.053 回答