我正在使用ObjectListView
,并且我要添加到其中的对象是我为此创建的自定义Class
。
我的Class
包含进行计算的信息。我想允许用户能够编辑他们已经进行的计算。
我尝试使用以下不同的代码从ObjectListView
中拉出对象:
Customer customer = (Customer)listCustomers.SelectedItem.RowObject;
Customer customer = (Customer)listCustomers.GetSelectedObject();
Customer customer = (Customer)listCustomers.SelectedObject;
所有这些方法都导致customer
成为该对象。不过,我面临的问题是,如果我更改该类的任何值,例如以下代码,它将反映ObjectListView中该对象的更改:
customer.TotalValue += 50;
即使我以其他形式运行这些计算,也可以通过以下方式传输该信息:
EditCustomer editForm = new EditCustomer(customer)
editForm.Show();
它仍然会更改ObjectListView中的对象。
我想知道的是,如何在不更改customer
中的对象的情况下提取该对象,并允许我编辑ObjectListView
对象?
您的客户变量是对存储在ObjectListView中的对象的引用,因此,当您修改客户时,更改将反映在其所引用的基础对象中。当您将客户传递给其他表单时,您正在传递引用,仍然指向相同的基础对象,因此可以通过该引用修改该对象,甚至可以使用其他表单。
要获得所需的行为,您需要克隆对象,对其进行完全独立的复制,然后对副本进行更改不会影响原始对象。
Check here有关克隆对象的信息。