2012-05-12 12 views
1

このリストからアイテムを追加/編集/削除するためのリストビューとボタンがあるフォームがあります。キャンセルボタンが&に保存されています。キャンセルボタンを押すと、現在のフォームで行われたすべての変更を元に戻したいと思います。したがって、フォームを読み込んでいる間、私は以下のように元のリストのコピーを保持します。オブジェクトのコピーを保存して後で復元する方法

backupMyListView = MyListView 

キャンセルボタンのコードでは、私はその逆です。

MyListView = refMyListView 

起こっていただきましたが、毎回のMyListViewを更新しましたので、元のリストビューが復元されることはありません、backupMyListViewも更新なっていた、ということです。

キャンセルボタンを押したときに元のリストビューを復元するにはどうすればよいですか?

答えて

2

どちらのリストも明らかに同じリストを参照しています。

あなたは基本的にオブジェクトのクローンを作成またはコピーする必要があります。

Dim backupMyListView As New ListView 
For Each lv As ListViewItem In MyListView.Items 
    backupMyListView.Items.Add(lv.Clone) 
Next 
1

あなたは値型と参照型の違いを検討する必要があります。変数を別の変数の値に設定すると、その値がオブジェクトの値型(TypeDef構造体)の場合にのみデータがコピーされます。値がオブジェクトの参照タイプ(クラス)である場合、同じオブジェクトへの別の参照を作成するだけです。したがって、新しいListViewオブジェクト(参照型)を作成し、2つの異なる変数を設定すると、それらは両方とも同じオブジェクトを指します。 1つの変数によって行われた変更は、他の変数にも影響します。データのコピーを作成するには、Cloneメソッドを使用する必要があります。このよう

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 
関連する問題