2011-10-16 67 views
0

我的程序類有:的WinForms - 點的形式克隆

Application.Run(new Form1()); 
在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"); 
} 

模型I類有:

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

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

我最初的Form1中對象的大小非常大。用戶在文本框中輸入值之後:我克隆模型對象並調用一個使按鈕非常小的方法。然後,我怎樣才能將模型對象設置爲使用大按鈕指向原始模型對象?

我得到這個錯誤:

我知道我可以只改變按鈕的大小「因爲它是隻讀的,不能分配給該」但我需要克隆整個對象,因爲還有其他的原我想要重置的變量。

回答

1

一個問題 - 預計的行爲,雖然克隆兩個模型引用相同的FormClone()方法只是創建模型的新實例,但它仍然引用相同的Form對象,

你能堅持初始模型的狀態在其他私人領域一樣

private Model backupModel; 

,並在申請前一個用戶自定義值只是備份和後來恢復目前的模型,如:

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:所以問題是在克隆方法,而不是克隆的形式。所以你克隆模型,但形式仍然相同。我建議使用深度複製爲此目的使用二進制序列化 – sll