2011-10-16 3 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

하나의 질문 - 두 모델을 모두 복제하는 동안 동일한 동작을 할 것으로 예상됩니까? Form? Clone() 방법은 모델의 새로운 인스턴스를 생성하지만, 여전히 같은 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 : 문제는 Form의 복제본이 아닌 복제 메소드에 있습니다. 그래서 당신은 복제하지만 모델은 여전히 ​​동일합니다. 바이너리 직렬화를 사용하여이 목적으로 딥 카피 (Deep Copy)를 사용할 것을 제안한다. – sll