1

入力されたフォームの浅いコピーを作成したいので、ユーザーがチェックボックスを選択して保存ボタンの代わりに閉じるを押すと、「スケジュールフォーム」を空である浅いコピーフォーム「scheduleform2」のチェックボックスに置き換えます。しかし、問題は、変更が「scheduleform」で行われ、何らかの形で「scheduleform2」に表示され、そのため同じフォームデータになってしまうことです。たとえば、「scheduleform」でチェックボックスがオンになっている場合、シャローコピーにしても「scheduleform2」に変更が表示されます。

DefaultScheduleForm scheduleForm2 = new DefaultScheduleForm();

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

scheduleForm2 = scheduleForm.ShallowCopy();

scheduleForm = scheduleForm2;
4

2 に答える 2

0

浅いコピーとは、まさにあなたが今得ているものを意味します。ディープコピーまたは次の行の何かを作成する必要があります。

scheduleForm2 = scheduleForm;
scheduleForm = new DefaultScheduleForm();
于 2012-10-17T10:47:04.250 に答える
0

必要なことを行うには、フォーム内のすべてのコントロールを MemberwiseClone する必要があります。

ただし、問題のより良い解決策は、フォーム自体ではなくフォームの状態を保存し、キャンセル時にフォームを保存された状態に再バインドすることです。

于 2012-10-17T10:20:47.307 に答える