1

我想制作一个填充表单的浅表副本,所以如果用户选择复选框并按下关闭而不是保存按钮,那么我想用浅表副本表单“scheduleform2”的复选框替换“scheduleform”,这是空的。但问题是当在“scheduleform”中进行更改时,它们会以某种方式出现在“scheduleform2”中,因此我最终会得到相同的表单数据。例如,当在“scheduleform”中选中一个复选框时,尽管将其设为浅拷贝,但更改仍出现在“scheduleform2”中。

DefaultScheduleForm scheduleForm2 = new DefaultScheduleForm();

public DefaultScheduleForm ShallowCopy()
{
  return (DefaultScheduleForm)this.MemberwiseClone();
}

scheduleForm2 = scheduleForm.ShallowCopy();

scheduleForm = scheduleForm2;
4

2 回答 2

0

要执行您想要的操作,您需要 MemberwiseClone 表单中的所有控件。

但更好的解决方案是保存表单状态,而不是表单本身,并在取消时将表单重新绑定到已保存状态。

于 2012-10-17T10:20:47.307 回答
0

浅拷贝正是你现在得到的。你应该做一个深拷贝,或者只是以下几行:

scheduleForm2 = scheduleForm;
scheduleForm = new DefaultScheduleForm();
于 2012-10-17T10:47:04.250 回答