2011-10-16 7 views
0

私のプログラムのクラスのクローンを作成するには、持っている:リサイズ - ポイントフォーム

のForm1クラスの
Application.Run(new Form1()); 

私が持っている:

私が持っているモデルクラスで
model = new Model(this); 

    private void userEnteredText() 
{ 
     Model clonedModel = (Model)model.Clone(); 
     this.myButton.Size = new System.Drawing.Size(10,5); 
     MessageBox.Show("buttons made small"); 
     this = clonedModel; 
     MessageBox.Show("clone complete and buttons restored to orig size"); 
} 

public Model(Form1 form1) 
    { 
     myform = form1; 
    } 

public object Clone() 
{ 
    return new Model(myform); 
} 

私の最初のForm1オブジェクトは本当に大きなボタンのサイズを持っています。ユーザーがテキストボックスに値を入力した後:モデルオブジェクトをクローンし、ボタンを実際に小さくするメソッドを呼び出します。大きなボタンで元のモデルオブジェクトを指すようにモデルオブジェクトを設定するにはどうすればよいですか?

私はこのエラーを取得しています:

は、「それが読み取り専用にされているため、これに割り当てることができません」他オリジナルがあるので、私は、私はちょうどボタンのサイズを変更することができます知っているが、私は全体のオブジェクトのクローンを作成する必要があります私がリセットしたい変数。

答えて

1

1つの質問 - 両方のモデルを同じように参照している間に同じ動作が期待されますか?Form?あなたは

private Model backupModel; 

とユーザー定義を適用する前のような他の民間分野での初期モデルの状態を保持することができますClone()方法は、単にモデルの新しいインスタンスを作成しますが、それはまだ同じFormオブジェクトを参照、

値だけバックアップし、後で現在のモデルを復元する:

private void userEnteredText() 
{ 
     this.backupModel = model;  
     Model clonedModel = (Model)model.Clone(); 
     this.myButton.Size = new System.Drawing.Size(10,5); 
     MessageBox.Show("buttons made small"); 
     model = this.backupModel;  
     MessageBox.Show("clone complete and buttons restored to orig size"); 
} 
+0

あなたがclonedModelを割り当てた後、それは誤植ですか? – toop

+0

元のフォームボタンのサイズ(つまり、ユーザーアクションの前)が表示されるように、モデルとフォームを複製できるようにしたいと思います。 – toop

+0

@toop:Formのクローンではないクローンメソッドに問題があります。あなたはモデルをクローンしますが、それでも同じ形をしています。バイナリのシリアライゼーションを使ってこの目的のためにディープコピーを使うことをお勧めします – sll